//! Greedy coloring with natural vertex ordering.
usecrate::error::GraphalgResult;usecrate::repr::adjacency_list::AdjacencyList;pubfngreedy_coloring(g:&AdjacencyList)->GraphalgResult<Vec<usize>>{let n = g.n;letmut color =vec![usize::MAX; n];for u in0..n {letmut used =vec![false; n +1];for&v in g.neighbors(u)?{if color[v]!=usize::MAX&& color[v]< used.len(){
used[color[v]]=true;}}letmut c =0;while c < used.len()&& used[c]{
c +=1;}
color[u]= c;}Ok(color)}#[cfg(test)]modtests{usesuper::*;#[test]fngreedy_bipartite(){letmut g =AdjacencyList::new(4);
g.add_undirected_edge(0,1).expect("ok");
g.add_undirected_edge(2,3).expect("ok");
g.add_undirected_edge(0,2).expect("ok");
g.add_undirected_edge(1,3).expect("ok");let c =greedy_coloring(&g).expect("ok");for u in0..4{for&v in g.neighbors(u).expect("ok"){assert_ne!(c[u], c[v]);}}}}