private readonly Edge[] _edgeTo; // edgeTo[v] = last edge on longest s->v path. public AcyclicLongestPath(EdgeWeightedDigraph graph, Int32 vertice) { this._distTo = new Double[graph.VerticesCount]; this._edgeTo = new Edge[graph.VerticesCount]; for (int i = 0; i < graph.VerticesCount; i++) { this._distTo[i] = Double.NegativeInfinity; } this._distTo[vertice] = 0.0; TopologicalChecker topological = TopologicalChecker.Create(graph); if (topological.Order == null) { throw new InvalidOperationException("Digraph is not acyclic."); } foreach (Int32 v in topological.Order) { foreach (Edge edge in graph.GetAdjacentVertices(v)) { this.Relax(edge); } } }
public void Test_IsDAG_EdgeWeighted() { EdgeWeightedDigraph graph = new EdgeWeightedDigraph(3); graph.AddEdge(new Edge(0, 1, 0.2)); graph.AddEdge(new Edge(0, 2, 0.3)); TopologicalChecker checker = TopologicalChecker.Create(graph); Assert.True(checker.IsDAG); }
public void Test_IsDAG() { Digraph graph = new Digraph(3); graph.AddEdge(0, 1); graph.AddEdge(0, 2); TopologicalChecker checker = TopologicalChecker.Create(graph); Assert.True(checker.IsDAG); }
public void Test_Rank() { Digraph graph = new Digraph(4); graph.AddEdge(0, 1); graph.AddEdge(0, 2); graph.AddEdge(2, 3); TopologicalChecker checker = TopologicalChecker.Create(graph); Assert.Equal(1, checker.Rank(1)); }
public void Test_Order() { Digraph graph = new Digraph(4); graph.AddEdge(0, 1); graph.AddEdge(0, 2); graph.AddEdge(2, 3); TopologicalChecker checker = TopologicalChecker.Create(graph); AssertUtilities.Sequence(new Int32[4] { 0, 1, 2, 3 }, checker.Order); }