Exemplo n.º 1
0
        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();
                }
            }
        }
Exemplo n.º 2
0
        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();
            //}
        }
Exemplo n.º 3
0
    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");
            }
        }
    }
Exemplo n.º 4
0
 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)
                });
            }
        }
    }
Exemplo n.º 6
0
        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);
        }
    }