pub fn topological_sort(g: &Graph) -> Option<Vec<usize>>Expand description
Topologik saralash — yo’naltirilgan asiklik grafda (DAG) bog’liqliklar tartibi.
Masala: “A ni B dan oldin bajarish kerak” turidagi cheklovlar berilgan. Qaysi tartibda bajarsak, hech bir cheklov buzilmaydi?
Kahn algoritmi: kiruvchi qirrasi yo’q (in_degree == 0) tugunlarni navbatga
solamiz; birini olganimizda uning qirralarini “o’chirib”, qo’shnilarining
in_degree sini kamaytiramiz.
Sikl bo’lsa (bog’liqliklar aylanma) — None.
- Time: O(V + E).
§Misol: darslarni qaysi tartibda o’qish kerak
use rust_algorithms::graph::{Graph, topological_sort};
// 0: Matematika → 1: Algoritmlar → 3: ML
// 2: Rust → 3
let mut g = Graph::new_directed(4);
g.add_unweighted_edge(0, 1);
g.add_unweighted_edge(1, 3);
g.add_unweighted_edge(2, 3);
let tartib = topological_sort(&g).unwrap();
let orin = |x: usize| tartib.iter().position(|&y| y == x).unwrap();
assert!(orin(0) < orin(1) && orin(1) < orin(3) && orin(2) < orin(3));