public void DijkstraSPTest() { EdgeWeightedDiagraph ewg; using (StreamReader sr = new StreamReader(@"E:\Study\ALG2017\ALGRKC\dataSelf\tinyEWD.txt")) { ewg = new EdgeWeightedDiagraph(sr); } int s = 0; DijkstraSP SP = new DijkstraSP(ewg, s); for (int dest = 0; dest < ewg.V(); dest++) { if (SP.HasPathTo(dest)) { Console.Write(s + " to " + dest); Console.Write(" (" + SP.DistanceTo(dest) + "):"); foreach (DirectedEdge de in SP.PathTo(dest)) { Console.Write(de + " "); } Console.WriteLine(); } } }
private static void ShortestPath() { string filename = "mediumEWD.txt"; Scanner scanner = new Scanner(new StreamReader(File.OpenRead(filename))); IEdgeWeightedDIgraph G = new EdgeWeightedDigraph(scanner); StdOut.Print("输入一个边:"); int s = StdIn.ReadInt(); IShortestPath sp = new DijkstraSP(G, s); for (int t = 0; t < G.V; t++) { StdOut.Print(s + " to " + t); StdOut.Printf(" ({0}): ", sp.DistTo(t)); if (sp.HasPathTo(t)) { foreach (var e in sp.PathTo(t)) { StdOut.Print(e + " "); } } StdOut.Println(); } DijkstraAllPairsSP allPairsSP = new DijkstraAllPairsSP(G); StdOut.Println(); StdOut.Println(allPairsSP.Dist(1, 28)); //string filename2 = "tinyEWDAG.txt"; //scanner = new Scanner(new StreamReader(File.OpenRead(filename2))); //G = new EdgeWeightedDigraph(scanner); //IShortestPath sp2 = new AcyclicSP(G, s); //for (int t = 0; t < G.V; t++) //{ // StdOut.Print(s + " to " + t); // StdOut.Printf(" ({0}): ", sp2.DistTo(t)); // if (sp2.HasPathTo(t)) // foreach (var e in sp.PathTo(t)) // { // StdOut.Print(e + " "); // } // StdOut.Println(); //} //filename = "tinyEWDnc.txt"; //scanner = new Scanner(new StreamReader(File.OpenRead(filename))); //G = new EdgeWeightedDigraph(scanner); //sp = new BellmanFordSP(G, s); //for (int t = 0; t < G.V; t++) //{ // StdOut.Print(s + " to " + t); // StdOut.Printf(" ({0}): ", sp.DistTo(t)); // if (sp.HasPathTo(t)) // foreach (var e in sp.PathTo(t)) // { // StdOut.Print(e + " "); // } // StdOut.Println(); //} }
void Start() { double a = double.PositiveInfinity; double b = (double.PositiveInfinity + 10.0); print(a > b); print(a < b); print(a == b); EdgeWeightedDigraph G = new EdgeWeightedDigraph(Graph); int s = 0; // compute shortest paths DijkstraSP sp = new DijkstraSP(G, s); // print shortest path for (int t = 0; t < G.V(); t++) { if (sp.hasPathTo(t)) { string str = s + " to " + t + " Distance=" + sp.DistTo(t); foreach (DirectedEdge e in sp.PathTo(t)) { str += (e + "\t"); } print(str); } else { print(s + " to " + t + " no path\n"); } } }
public DijkstraAllPairsSP(EdgeWeightedDigraph G) { all = new DijkstraSP[G.V()]; for (int v = 0; v < G.V(); v++) { all[v] = new DijkstraSP(G, v); } }
/**/ public static void main(string[] strarr) { In i = new In(strarr[0]); EdgeWeightedDigraph edgeWeightedDigraph = new EdgeWeightedDigraph(i); int i2 = Integer.parseInt(strarr[1]); DijkstraSP dijkstraSP = new DijkstraSP(edgeWeightedDigraph, i2); for (int j = 0; j < edgeWeightedDigraph.V(); j++) { if (dijkstraSP.hasPathTo(j)) { StdOut.printf("%d to %d (%.2f) ", new object[] { Integer.valueOf(i2), Integer.valueOf(j), java.lang.Double.valueOf(dijkstraSP.distTo(j)) }); if (dijkstraSP.hasPathTo(j)) { Iterator iterator = dijkstraSP.pathTo(j).iterator(); while (iterator.hasNext()) { DirectedEdge obj = (DirectedEdge)iterator.next(); StdOut.print(new StringBuilder().append(obj).append(" ").toString()); } } StdOut.println(); } else { StdOut.printf("%d to %d no path\n", new object[] { Integer.valueOf(i2), Integer.valueOf(j) }); } } }
public void Run() { Console.WriteLine("Choose file:"); // Prompt Console.WriteLine("1 - tinyEWD.txt"); // Prompt Console.WriteLine("2 - mediumEWD.txt"); // Prompt //Console.WriteLine("3 - mediumEWG.txt"); // Prompt Console.WriteLine("or quit"); // Prompt var fileNumber = Console.ReadLine(); string fileName; switch (fileNumber) { case "1": fileName = "tinyEWD.txt"; break; case "2": fileName = "mediumEWD.txt"; break; //case "3": // fileName = "largeEWG.zip"; // break; case "quit": return; default: return; } var @in = new In($"Files\\Graphs\\{fileName}"); var lines = @in.ReadAllLines(); var lineIterator = 0; var v = 0; var e = 0; var edges = new List <DirectedEdge>(); foreach (var line in lines) { if (lineIterator == 0) { v = Convert.ToInt32(line); } if (lineIterator == 1) { e = Convert.ToInt32(line); } if (lineIterator > 1) { var lineSplitted = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var ve = Convert.ToInt32(lineSplitted[0]); var we = Convert.ToInt32(lineSplitted[1]); var weight = Convert.ToDouble(lineSplitted[2], CultureInfo.InvariantCulture); var edge = new DirectedEdge(ve, we, weight); edges.Add(edge); } lineIterator++; } var edgeWeightedDigraph = new EdgeWeightedDigraph(v, e, edges); Console.WriteLine(edgeWeightedDigraph); const int s = 0; // compute shortest paths var sp = new DijkstraSP(edgeWeightedDigraph, s); // print shortest path for (var t = 0; t < edgeWeightedDigraph.V; t++) { if (sp.HasPathTo(t)) { Console.Write($"{s} to {t} {$"{sp.DistTo(t):0.00}"} "); foreach (var edge in sp.PathTo(t)) { Console.Write($"{edge} "); } Console.WriteLine(); } else { Console.WriteLine($"{s} to {t} no path{Environment.NewLine}"); } } Console.ReadLine(); }
private void augment() { EdgeWeightedDigraph edgeWeightedDigraph = new EdgeWeightedDigraph(2 * this.N + 2); int num = 2 * this.N; int num2 = 2 * this.N + 1; for (int i = 0; i < this.N; i++) { if (this.xy[i] == -1) { edgeWeightedDigraph.addEdge(new DirectedEdge(num, i, (double)0f)); } } for (int i = 0; i < this.N; i++) { if (this.yx[i] == -1) { edgeWeightedDigraph.addEdge(new DirectedEdge(this.N + i, num2, this.py[i])); } } for (int i = 0; i < this.N; i++) { for (int j = 0; j < this.N; j++) { if (this.xy[i] == j) { edgeWeightedDigraph.addEdge(new DirectedEdge(this.N + j, i, (double)0f)); } else { edgeWeightedDigraph.addEdge(new DirectedEdge(i, this.N + j, this.reduced(i, j))); } } } DijkstraSP dijkstraSP = new DijkstraSP(edgeWeightedDigraph, num); Iterator iterator = dijkstraSP.pathTo(num2).iterator(); while (iterator.hasNext()) { DirectedEdge directedEdge = (DirectedEdge)iterator.next(); int num3 = directedEdge.from(); int num4 = directedEdge.to() - this.N; if (num3 < this.N) { this.xy[num3] = num4; this.yx[num4] = num3; } } for (int j = 0; j < this.N; j++) { double[] arg_180_0 = this.px; int num5 = j; double[] array = arg_180_0; array[num5] += dijkstraSP.distTo(j); } for (int j = 0; j < this.N; j++) { double[] arg_1B6_0 = this.py; int num5 = j; double[] array = arg_1B6_0; array[num5] += dijkstraSP.distTo(this.N + j); } }