public void RemoveDanglingLinks() { VertexCollection vertexs = new VertexCollection(); do { vertexs.Clear(); IVertexListGraph graph = new FilteredVertexListGraph(this.VisitedGraph, new InDictionaryVertexPredicate(this.ranks)); foreach (IVertex vertex in this.ranks.get_Keys()) { if (graph.OutDegree(vertex) == 0) { vertexs.Add(vertex); } } VertexCollection.Enumerator enumerator = vertexs.GetEnumerator(); while (enumerator.MoveNext()) { IVertex vertex2 = enumerator.get_Current(); this.ranks.Remove(vertex2); } } while (vertexs.Count != 0); }
public void Create(IMutableVertexAndEdgeListGraph cg) { if (cg == null) { throw new ArgumentNullException("cg"); } if (this.components == null) { this.ComputeComponents(); } this.sccVertexMap = this.BuildSCCVertexMap(this.components); VertexCollection vertexs = new VertexCollection(); IDictionaryEnumerator enumerator = this.sccVertexMap.GetEnumerator(); while (enumerator.MoveNext()) { IVertex cgVertex = cg.AddVertex(); this.OnInitCondensationGraphVertex(new CondensationGraphVertexEventArgs(cgVertex, (IVertexCollection) enumerator.Value)); vertexs.Add(cgVertex); } for (int i = 0; i < this.sccVertexMap.Keys.Count; i++) { VertexCollection vertexs2 = new VertexCollection(); IVertexEnumerator enumerator2 = ((IVertexCollection) this.sccVertexMap[i]).GetEnumerator(); while (enumerator2.MoveNext()) { IVertex vertex2 = enumerator2.get_Current(); IEdgeEnumerator enumerator3 = this.VisitedGraph.OutEdges(vertex2).GetEnumerator(); while (enumerator3.MoveNext()) { IVertex vertex3 = enumerator3.get_Current().get_Target(); int num2 = this.components.get_Item(vertex3); if (i != num2) { IVertex vertex4 = vertexs.get_Item(num2); if (!vertexs2.Contains(vertex4)) { vertexs2.Add(vertex4); } } } } IVertex vertex5 = vertexs.get_Item(i); VertexCollection.Enumerator enumerator4 = vertexs2.GetEnumerator(); while (enumerator4.MoveNext()) { IVertex vertex6 = enumerator4.get_Current(); cg.AddEdge(vertex5, vertex6); } } }
internal void ComputeNoInit(IVertex s) { VertexCollection vertices = new VertexCollection(); new TopologicalSortAlgorithm(this.VisitedGraph, vertices).Compute(); this.OnDiscoverVertex(s); VertexCollection.Enumerator enumerator = vertices.GetEnumerator(); while (enumerator.MoveNext()) { IVertex v = enumerator.get_Current(); this.OnExamineVertex(v); IEdgeEnumerator enumerator2 = this.VisitedGraph.OutEdges(v).GetEnumerator(); while (enumerator2.MoveNext()) { IEdge e = enumerator2.get_Current(); this.OnDiscoverVertex(e.get_Target()); if (this.Relax(e)) { this.OnEdgeRelaxed(e); } else { this.OnEdgeNotRelaxed(e); } } this.OnFinishVertex(v); } }