最短距離を探すアルゴリズム
fn bellman_ford(edges: Vec<[usize; 3]>, num_v: usize) -> Vec<usize>{ let inf = 999; let mut dist = Vec::new(); for _ in 0..num_v { dist.push(inf); } dist[0] = 0; let mut changed = true; while changed == true { changed = false; for edge in &edges { if dist[edge[1]] > dist[edge[0]] + edge[2] { dist[edge[1]] = dist[edge[0]] + edge[2]; changed = true; } } } return dist; } fn main() { let edges = vec![[0, 1, 4], [0, 2, 3], [1, 2, 1], [1, 3, 1], [1, 4, 5], [2, 5, 2], [4, 6, 2], [5, 4, 1], [5, 6, 4]]; let dist = bellman_ford(edges, 7); println!("{:?}", dist); }
Compiling rust v0.1.0 (/home/vagrant/dev/algorithm/rust)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.22s
Running `target/debug/rust`
[0, 4, 3, 5, 6, 5, 8]
いまいちよーわからん…