示例#1
0
        private static Digraph Make(string mode)
        {
            Digraph g = new Digraph(5);

            if (mode == "Dijkstra")
            {
                g = new Digraph(5);
                g.AddEdge(0, 1, 10);
                g.AddEdge(0, 4, 5);
                g.AddEdge(1, 2, 1);
                g.AddEdge(1, 4, 2);
                g.AddEdge(2, 3, 4);
                g.AddEdge(3, 0, 7);
                g.AddEdge(3, 2, 6);
                g.AddEdge(4, 1, 3);
                g.AddEdge(4, 2, 9);
                g.AddEdge(4, 3, 2);
            }
            else if (mode == "Dijkstra1")
            {
                g = new Digraph(5);
                g.AddEdge(0, 1, 3);
                g.AddEdge(0, 4, 5);
                g.AddEdge(1, 2, 6);
                g.AddEdge(1, 4, 2);
                g.AddEdge(2, 3, 2);
                g.AddEdge(3, 0, 3);
                g.AddEdge(3, 2, 7);
                g.AddEdge(4, 1, 1);
                g.AddEdge(4, 2, 4);
                g.AddEdge(4, 3, 6);
            }
            else if (mode == "DAG")
            {
                g = new Digraph(6);
                g.AddEdge(0, 1, 5);
                g.AddEdge(0, 2, 3);
                g.AddEdge(1, 2, 2);
                g.AddEdge(1, 3, 6);
                g.AddEdge(2, 3, 7);
                g.AddEdge(2, 4, 4);
                g.AddEdge(2, 5, 2);
                g.AddEdge(3, 4, -1);
                g.AddEdge(3, 5, 1);
                g.AddEdge(4, 5, -2);
            }
            return(g);
        }
示例#2
0
        public void Dijkstra(Digraph g, int s)
        {
            Initialize(g, s);

            List <int> S    = new List <int>();
            MinHeap    heap = new MinHeap(g.V, g.D);

            while (!heap.IsEmpty)
            {
                int u = heap.ExtractMin();
                S.Add(u);
                foreach (var v in g.Adj(u))
                {
                    if (Relax(g, u, v))
                    {
                        heap.Decrease(v, g.D[v]);
                    }
                }
            }
        }