new TGraph DoBuildMSF <TGraph>(TGraph forest) where TGraph : BipartiteGraph <T>
        {
            DisjointSet <BipartiteGraphVertex <T> > set = new DisjointSet <BipartiteGraphVertex <T> >();

            foreach (var vertex in Data.GetUVertexList())
            {
                set.MakeSet(vertex);
                forest.U.CreateVertex(vertex.Value);
            }
            foreach (var vertex in Data.GetVVertexList())
            {
                set.MakeSet(vertex);
                forest.V.CreateVertex(vertex.Value);
            }
            var edgeList = Data.GetEdgeList();

            edgeList.Sort((x, y) => x.Weight.CompareTo(y.Weight));
            foreach (var edge in edgeList)
            {
                if (!set.AreEquivalent(edge.StartVertex, edge.EndVertex))
                {
                    set.Union(edge.StartVertex, edge.EndVertex);
                    forest.CreateEdge(forest.Data.GetUVertex(edge.StartVertex.Handle), forest.Data.GetVVertex(edge.EndVertex.Handle), edge.Weight);
                }
            }
            return(forest);
        }
Esempio n. 2
0
        public IVertexRelation <TValue, TVertex> GetVertexRelationData()
        {
            DisjointSet <TVertex> vertexDisjointSet = new DisjointSet <TVertex>();

            FillVertexRelationDataCore(vertexDisjointSet);
            return(new VertexRelationDataObj(this, vertexDisjointSet));
        }
Esempio n. 3
0
        void FillVertexRelationDataCore(DisjointSet <TVertex> set)
        {
            if (Size == 0)
            {
                return;
            }
            Stack <TVertex> stack = new Stack <TVertex>();

            DoSearch(GetVertex(0), new FillVertexRelationDataContext(stack, set), FillVertexRelationDataCore);
        }
Esempio n. 4
0
        protected internal TGraph DoBuildMSF <TGraph>(TGraph forest) where TGraph : UndirectedGraph <TValue, TVertex>
        {
            DisjointSet <TVertex> set = new DisjointSet <TVertex>();

            foreach (TVertex vertex in GetVertexList())
            {
                set.MakeSet(vertex);
                forest.CreateVertex(vertex.Value);
            }
            var edgeList = Data.GetEdgeList();

            edgeList.Sort((x, y) => x.Weight.CompareTo(y.Weight));
            foreach (Edge <TValue, TVertex> edge in edgeList)
            {
                if (!set.AreEquivalent(edge.StartVertex, edge.EndVertex))
                {
                    set.Union(edge.StartVertex, edge.EndVertex);
                    forest.CreateEdge(forest.GetVertex(edge.StartVertex.Handle), forest.GetVertex(edge.EndVertex.Handle), edge.Weight);
                }
            }
            return(forest);
        }
Esempio n. 5
0
 public VertexRelationDataObj(DirectedGraph <TValue, TVertex> graph, DisjointSet <TVertex> vertexDisjointSet)
 {
     this.graph             = graph;
     this.vertexDisjointSet = vertexDisjointSet;
 }
Esempio n. 6
0
 public FillVertexRelationDataContext(Stack <TVertex> stack, DisjointSet <TVertex> set)
 {
     this.stack     = stack;
     this.set       = set;
     this.dfsNumber = 1;
 }