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); }
public IVertexRelation <TValue, TVertex> GetVertexRelationData() { DisjointSet <TVertex> vertexDisjointSet = new DisjointSet <TVertex>(); FillVertexRelationDataCore(vertexDisjointSet); return(new VertexRelationDataObj(this, vertexDisjointSet)); }
void FillVertexRelationDataCore(DisjointSet <TVertex> set) { if (Size == 0) { return; } Stack <TVertex> stack = new Stack <TVertex>(); DoSearch(GetVertex(0), new FillVertexRelationDataContext(stack, set), FillVertexRelationDataCore); }
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); }
public VertexRelationDataObj(DirectedGraph <TValue, TVertex> graph, DisjointSet <TVertex> vertexDisjointSet) { this.graph = graph; this.vertexDisjointSet = vertexDisjointSet; }
public FillVertexRelationDataContext(Stack <TVertex> stack, DisjointSet <TVertex> set) { this.stack = stack; this.set = set; this.dfsNumber = 1; }