Ejemplo n.º 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>();
        }
Ejemplo n.º 2
0
        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>();
        }