示例#1
0
        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>();
        }
示例#2
0
        public void TestQuickUnionWithCompression()
        {
            UnionFind unionFind = new QuickUnionWithCompression(count);

            this.TestUnionFind(unionFind);
        }