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