Skip to main content

topological_sort

Function topological_sort 

Source
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));