public Kruskal(WeightedEdgeGraph G) { queue = new Queue <WeightedEdge>(); pq = new MinPQ <WeightedEdge>(G.GetE()); union = new int[G.GetV()]; for (int x = 0; x < union.Count(); x++)//初始化连通分量 { union[x] = x; } foreach (var e in G.edges())//初始化优先队列 { pq.insert(e); } while (!pq.IsEmpty() && queue.Count < G.GetV() - 1) { var minE = pq.DeletePQHead();//最短边 int v = minE.either(); int w = minE.other(v); if (isConnect(v, w)) { continue; //会形成环 } queue.Enqueue(minE); connect(v, w);//加入同一连通分量 } }