public void Run() { // create random DAG with V vertices and E edges; then add F random edges const int vv = 50; const int e = 100; const int f = 20; var digraph = new EdgeWeightedDigraph(vv); var vertices = new int[vv]; for (var i = 0; i < vv; i++) { vertices[i] = i; } StdRandom.Shuffle(vertices); for (var i = 0; i < e; i++) { int v, w; do { v = StdRandom.Uniform(vv); w = StdRandom.Uniform(vv); } while (v >= w); var weight = StdRandom.Uniform(); digraph.AddEdge(new DirectedEdge(v, w, weight)); } // add F extra edges for (var i = 0; i < f; i++) { var v = StdRandom.Uniform(vv); var w = StdRandom.Uniform(vv); var weight = StdRandom.Uniform(0.0, 1.0); digraph.AddEdge(new DirectedEdge(v, w, weight)); } Console.WriteLine(digraph); // find a directed cycle var finder = new EdgeWeightedDirectedCycle(digraph); if (finder.HasCycle()) { Console.Write("Cycle: "); foreach (var edge in finder.Cycle()) { Console.Write(edge + " "); } Console.WriteLine(); } // or give topologial sort else { Console.WriteLine("No directed cycle"); } Console.ReadLine(); }
public Topological(EdgeWeightedDigraph G) { EdgeWeightedDirectedCycle finder = new EdgeWeightedDirectedCycle(G); if (!finder.hasCycle()) { DepthFirstOrder dfs = new DepthFirstOrder(G); order = dfs.reversePost(); } }
public Topological(EdgeWeightedDigraph ewd) { EdgeWeightedDirectedCycle edgeWeightedDirectedCycle = new EdgeWeightedDirectedCycle(ewd); if (!edgeWeightedDirectedCycle.hasCycle()) { DepthFirstOrder depthFirstOrder = new DepthFirstOrder(ewd); this.order = depthFirstOrder.reversePost(); } }
public Topological(EdgeWeightedDigraph graph) { var finder = new EdgeWeightedDirectedCycle(graph); if (!finder.HasCycle()) { DepthFirstOrder dfs = new DepthFirstOrder(graph); order = dfs.ReversePost(); } }
// by finding a cycle in predecessor graph private void findNegativeCycle() { int V = edgeTo.Length; EdgeWeightedDigraph spt = new EdgeWeightedDigraph(V); for (int v = 0; v < V; v++) if (edgeTo[v] != null) spt.addEdge(edgeTo[v]); EdgeWeightedDirectedCycle finder = new EdgeWeightedDirectedCycle(spt); cycle = finder.Cycle(); }
/**/ public static void main(string[] strarr) { int num = Integer.parseInt(strarr[0]); int num2 = Integer.parseInt(strarr[1]); int num3 = Integer.parseInt(strarr[2]); EdgeWeightedDigraph edgeWeightedDigraph = new EdgeWeightedDigraph(num); int[] array = new int[num]; for (int i = 0; i < num; i++) { array[i] = i; } StdRandom.shuffle(array); for (int i = 0; i < num2; i++) { int num4; int num5; do { num4 = StdRandom.uniform(num); num5 = StdRandom.uniform(num); }while (num4 >= num5); double d = java.lang.Math.random(); edgeWeightedDigraph.addEdge(new DirectedEdge(num4, num5, d)); } for (int i = 0; i < num3; i++) { int num4 = ByteCodeHelper.d2i(java.lang.Math.random() * (double)num); int num5 = ByteCodeHelper.d2i(java.lang.Math.random() * (double)num); double d = java.lang.Math.random(); edgeWeightedDigraph.addEdge(new DirectedEdge(num4, num5, d)); } StdOut.println(edgeWeightedDigraph); EdgeWeightedDirectedCycle edgeWeightedDirectedCycle = new EdgeWeightedDirectedCycle(edgeWeightedDigraph); if (edgeWeightedDirectedCycle.hasCycle()) { StdOut.print("Cycle: "); Iterator iterator = edgeWeightedDirectedCycle.cycle().iterator(); while (iterator.hasNext()) { DirectedEdge obj = (DirectedEdge)iterator.next(); StdOut.print(new StringBuilder().append(obj).append(" ").toString()); } StdOut.println(); } else { StdOut.println("No directed cycle"); } }
private void findNegativeCycle() { int num = this.edgeTo.Length; EdgeWeightedDigraph edgeWeightedDigraph = new EdgeWeightedDigraph(num); for (int i = 0; i < num; i++) { if (this.edgeTo[i] != null) { edgeWeightedDigraph.addEdge(this.edgeTo[i]); } } EdgeWeightedDirectedCycle edgeWeightedDirectedCycle = new EdgeWeightedDirectedCycle(edgeWeightedDigraph); this.cycle = edgeWeightedDirectedCycle.cycle(); }