最短距離を探すアルゴリズム
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]
いまいちよーわからん…