Skip to main content

prim

Function prim 

Source
pub fn prim<T>(graph: &Graph<T, f64>) -> Vec<EdgeIndex>
Expand description

Prim 算法

计算无向加权图的最小生成树 返回构成 MST 的边索引列表

§复杂度

  • 时间:O((V + E) log V) - 使用二叉堆
  • 空间:O(V) - 距离数组和堆

§示例

use god_gragh::graph::Graph;
use god_gragh::graph::traits::GraphOps;
use god_gragh::algorithms::mst::prim;

let mut graph = Graph::<&str, f64>::undirected();
let a = graph.add_node("A").unwrap();
let b = graph.add_node("B").unwrap();
let c = graph.add_node("C").unwrap();
let d = graph.add_node("D").unwrap();
graph.add_edge(a, b, 1.0).unwrap();
graph.add_edge(a, c, 4.0).unwrap();
graph.add_edge(b, c, 2.0).unwrap();
graph.add_edge(b, d, 5.0).unwrap();
graph.add_edge(c, d, 3.0).unwrap();

let mst_edges = prim(&graph);
assert_eq!(mst_edges.len(), 3); // n-1 条边