void init(DijkstraPath[] g, string s) { int i = 0; string[] nodes = new string[g.Length]; foreach (DijkstraPath node in g) { bool found = false; foreach (string n in nodes) { if (n == node.node) { found = true; } } if (!found) { nodes[i] = node.node; i++; } } Way = new DijkstraPath[i]; Q = new string[i]; for (i = 0; i < Q.Length; i++) { Way[i] = new DijkstraPath(nodes[i], null, (nodes[i] == s) ? 0 : int.MaxValue); Q[i] = nodes[i]; } }
void distUpdate(string u, string v, int d) { int alt; int WayU = 0; int WayV = 0; DijkstraPath nb = null; foreach (DijkstraPath p in Way) { if (p.node == u) { WayU = p.distance; } if (p.node == v) { WayV = p.distance; nb = p; } } Debug.Assert(nb != null); alt = WayU + d; if (alt < WayV) { nb.distance = alt; nb.neighborNode = u; } }
static void Main(string[] args) { string[] lines = System.IO.File.ReadAllLines(@"D:\Henry\Desktop/dVDijkstra.txt"); DijkstraList = new DijkstraPath[lines.Length * 2]; DijkstraNodeList = new string[lines.Length * 2]; int i = 0; foreach (string line in lines) { DijkstraList[i] = new DijkstraPath(DijkstraReader.readNode(line), DijkstraReader.readPrevNode(line), DijkstraReader.readDistance(line)); i++; DijkstraList[i] = new DijkstraPath(DijkstraReader.readPrevNode(line), DijkstraReader.readNode(line), DijkstraReader.readDistance(line)); /*a.setNext(DijkstraList); * DijkstraList = a;*/ i++; } Dijkstra path = new Dijkstra(DijkstraList, "KEO"); Console.WriteLine(path.shortestDistance("MinmusIC")); Console.ReadKey(); }