コード例 #1
0
        static void Main(string[] args)
        {
            EdgeWeightedDigraph g = new EdgeWeightedDigraph(8);

            foreach (var temp in TestEdgeData)
            {
                g.AddEdge(temp);
            }

            SP sp;

            //sp = new ShortestPath(g, 0);
            sp = new BellmanFordSP(g, 0);

            for (int i = 0; i < g.Vertice; i++)
            {
                Console.Write(0 + "to" + i + "( {0} )", sp.DisTo(i));

                if (sp.HasPath(i))
                {
                    foreach (DirectedEdge temp in sp.PathTo(i))
                    {
                        Console.Write(" " + temp.ToString() + "   ");
                    }

                    Console.WriteLine();
                }
            }
        }
コード例 #2
0
	void Start () {
      
        int s = 0;
        EdgeWeightedDigraph G = new EdgeWeightedDigraph(txt);

        BellmanFordSP sp = new BellmanFordSP(G, s);

        // print negative cycle
        if (sp.hasNegativeCycle())
        {
            foreach (DirectedEdge e in sp.negativeCycle())
                print(e);
        }

        // print shortest paths
        else
        {
            for (int v = 0; v < G.V(); v++)
            {
                if (sp.hasPathTo(v))
                {
                    string str=(s+" to "+ v+"  Distance="+ sp.DistTo(v)+"     ");
                    foreach (DirectedEdge e in sp.PathTo(v))
                    {
                       str+=(e + "   ");
                    }
                   print(str);
                }
                else
                {
                   print(s+" to "+ v+"           no path\n");
                }
            }
        }
    }
コード例 #3
0
        public void Run()
        {
            Console.WriteLine("Choose file:");      // Prompt
            Console.WriteLine("1 - tinyEWDn.txt");  // Prompt
            Console.WriteLine("2 - tinyEWDnc.txt"); // Prompt
            //Console.WriteLine("3 - mediumEWG.txt"); // Prompt

            Console.WriteLine("or quit"); // Prompt

            var    fileNumber = Console.ReadLine();
            string fileName;

            switch (fileNumber)
            {
            case "1":
                fileName = "tinyEWDn.txt";
                break;

            case "2":
                fileName = "tinyEWDnc.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 BellmanFordSP(edgeWeightedDigraph, s);

            // print negative cycle
            if (sp.HasNegativeCycle())
            {
                foreach (var edge in sp.NegativeCycle())
                {
                    Console.WriteLine(edge);
                }
            }
            else
            {
                // 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();
        }