Skip to main content

dijkstra

Function dijkstra 

Source
pub fn dijkstra(g: &Graph, start: usize) -> Vec<Option<i64>>
Expand description

Dijkstra — musbat og’irlikli grafda bitta manbadan barcha tugunlargacha eng qisqa masofalar.

G’oya (ochko’zlik): har qadamda “hali tekshirilmagan, lekin hozircha eng yaqin” tugunni olamiz va uning qo’shnilariga masofani yangilaymiz (relaxation). Musbat og’irliklarda bir marta olingan tugunning masofasi boshqa yaxshilanmaydi.

  • Time: O((V + E) log V) — min-heap bilan. Space: O(V).
  • Cheklov: og’irliklar manfiy bo’lmasligi kerak (manfiy bo’lsa → bellman_ford).

Qaytadi: har bir tugun uchun masofa; yetib bo’lmasa None.

§Misol

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

//  0 --4-- 1 --1-- 3
//   \      |
//    1     2
//     \    |
//      --- 2
let mut g = Graph::new_undirected(4);
g.add_edge(0, 1, 4);
g.add_edge(0, 2, 1);
g.add_edge(2, 1, 2);
g.add_edge(1, 3, 1);

let d = dijkstra(&g, 0);
assert_eq!(d[0], Some(0));
assert_eq!(d[2], Some(1));
assert_eq!(d[1], Some(3)); // 0→2→1 = 1+2 = 3, to'g'ridan-to'g'ri 4 dan arzon
assert_eq!(d[3], Some(4));