Skip to main content

is_bipartite

Function is_bipartite 

Source
pub fn is_bipartite(g: &Graph) -> Option<Vec<u8>>
Expand description

Graf ikki bo’lakli (bipartite) mi? — tugunlarni 2 rangga bo’yash mumkinmi, shundayki qo’shnilar har doim turli rangda bo’lsin.

Usul: BFS bilan yurib, har bir qavatni navbatma-navbat bo’yaymiz. Qo’shni bir xil rangga tushsa — bo’lmaydi.

Qayerda kerak: “ikki guruhga bo’lish”, “jadval to’qnashuvlari”, “toq uzunlikdagi sikl bormi?” masalalari.

§Misol

use rust_algorithms::graph::{Graph, is_bipartite};

let mut kvadrat = Graph::new_undirected(4); // 4 uzunlikdagi sikl — juft
for (a, b) in [(0, 1), (1, 2), (2, 3), (3, 0)] {
    kvadrat.add_unweighted_edge(a, b);
}
assert!(is_bipartite(&kvadrat).is_some());

let mut uchburchak = Graph::new_undirected(3); // toq sikl
for (a, b) in [(0, 1), (1, 2), (2, 0)] {
    uchburchak.add_unweighted_edge(a, b);
}
assert!(is_bipartite(&uchburchak).is_none());