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]); } } } }
public SP(EdgeWeightedDigrap graph, int s) { }