public void DijkstraSPTest()
        {
            var graph = new EdgeWeightedDigrap(8, new[]
            {
                "4 5 0.35",
                "5 4 0.35",
                "4 7 0.37",
                "5 7 0.28",
                "7 5 0.28",
                "5 1 0.32",
                "0 4 0.38",
                "0 2 0.26",
                "7 3 0.39",
                "1 3 0.29",
                "2 7 0.34",
                "6 2 0.40",
                "3 6 0.52",
                "6 0 0.58",
                "6 4 0.93"
            });

            var dijkstra = new DijkstraSP(graph, 0);
            Assert.AreEqual(dijkstra.HasPathTo(6), true);
            dijkstra.DistTo(6);

            var builder = new StringBuilder();
            foreach (var data in dijkstra.PathTo(6))
            {
                builder.AppendFormat("->{0}", data.To);
            }
        }
        public DijkstraSP(EdgeWeightedDigrap graph, int s)
        {
            distTo = new double[graph.V];
            edgeTo = new DirectedEdge[graph.V];
            minPq = new IndexMinPq<double>(graph.V);

            for (int i = 0; i < graph.V; i++)
            {
                distTo[i] = Double.MaxValue;
            }

            distTo[s] = 0;

            minPq.Insert(0, 0);
            while (!minPq.IsEmpty())
            {
                Visit(graph, minPq.DelMin());
            }
        }
        private void Visit(EdgeWeightedDigrap graph, int v)
        {
            foreach (DirectedEdge edge in graph.Adj(v))
            {
                int w = edge.To;

                if (distTo[w] > distTo[v] + edge.Weight)
                {
                    edgeTo[w] = edge;
                    distTo[w] = distTo[v] + edge.Weight;

                    if (minPq.Contains(w))
                    {
                        minPq.Change(w, distTo[w]);
                    }
                    else
                    {
                        minPq.Insert(w, distTo[w]);
                    }
                }
            }
        }
Esempio n. 4
0
 public SP(EdgeWeightedDigrap graph, int s)
 {
 }