public KruskMST(WeightedGraph graph) { MinHeap <Edge> queue = new MinHeap <Edge>(graph.E()); for (int i = 0; i < graph.V(); i++) { foreach (Edge edge in graph.Edges(i)) { if (edge.From() < edge.To()) { queue.Insert(edge); } } } List <Edge> edges = new List <Edge>(); UnionFind.UnionFind unionFind = new QuickUnionWithCompression(graph.V()); while (!queue.isEmpty()) { Edge edge = queue.Popup(); if (!unionFind.isConnected(edge.From(), edge.To())) { edges.Add(edge); wt += edge.Weight(); unionFind.union(edge.From(), edge.To()); } } this.edges = edges.ToArray <Edge>(); }
public LazyPrimMST(WeightedGraph graph) { this.graph = graph; this.heap = new MinHeap <Edge>(graph.E()); List <Edge> edges = new List <Edge>(); visited = new bool[graph.V()]; visit(0); while (!heap.isEmpty()) { Edge min = heap.Popup(); if (visited[min.To()]) { continue; } wt = wt + min.Weight(); edges.Add(min); visit(min.To()); } this.edges = edges.ToArray <Edge>(); }