ほとんどライブラリの使い方レベルだけど、なんとか動いた。
extern crate petgraph;
use std::fs;
use std::io::Write;
use petgraph::Graph;
use petgraph::algo;
use petgraph::dot::Dot;
fn main() {
let mut graph = Graph::new_undirected();
let na = graph.add_node("a");
let nb = graph.add_node("b");
let nc = graph.add_node("c");
let nd = graph.add_node("d");
let ne = graph.add_node("e");
let nf = graph.add_node("f");
graph.add_edge(na, nb, 20);
graph.add_edge(nb, nc, 20);
graph.add_edge(nc, nd, 10);
graph.add_edge(na, ne, 10);
graph.add_edge(nb, ne, 10);
graph.add_edge(nb, nf, 30);
graph.add_edge(nd, nf, 10);
graph.add_edge(ne, nf, 20);
let mut f = fs::File::create("graph.dot").unwrap();
let dot_str = format!("{:?}", Dot::with_config(&graph, &[]));
f.write(dot_str.as_bytes()).unwrap();
let path = algo::dijkstra(
&graph,
na,
Some(nd),
|e| *e.weight()
);
println!("result: {:?}", path);
}
実行結果
なんとなく動いているっぽい
result: {NodeIndex(1): 20, NodeIndex(5): 30, NodeIndex(0): 0, NodeIndex(3): 40, NodeIndex(4): 10, NodeIndex(2): 40}