Skip to content

Commit 90ae4ab

Browse files
committed
fix dijkstra
1 parent 65d0b1e commit 90ae4ab

File tree

1 file changed

+13
-13
lines changed
  • algorithm/graph_search/dijkstra/shortest_path

1 file changed

+13
-13
lines changed
Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
function Dijkstra(start, end) {
2-
tracer._sleep(333);
2+
tracer._sleep();
33
var MAX_VALUE = Infinity;
44
var minIndex, minDistance;
55
var S = []; // S[i] returns the distance from node v to node start
@@ -9,7 +9,8 @@ function Dijkstra(start, end) {
99
S[i] = MAX_VALUE;
1010
}
1111
S[start] = 0; // Starting node is at distance 0 from itself
12-
for (var k = 0; k < G.length; k++) {
12+
var k = G.length;
13+
while (k--) {
1314
// Finding a node with the shortest distance from S[minIndex]
1415
minDistance = MAX_VALUE;
1516
for (i = 0; i < G.length; i++) {
@@ -18,33 +19,32 @@ function Dijkstra(start, end) {
1819
minIndex = i;
1920
}
2021
}
21-
tracer._visit(minIndex, undefined);
22-
tracer._sleep(500);
22+
if (minDistance == MAX_VALUE) break; // If there is no edge from current node, jump out of loop
2323
D[minIndex] = true;
24-
if (minDistance == MAX_VALUE) { // If the distance is infinity, there is no more paths
25-
tracer._print('there is no path from ' + s + ' to ' + e);
26-
return false;
27-
}
24+
tracer._visit(minIndex);
2825
// For every unvisited neighbour of current node, we check
2926
// whether the path to it is shorter if going over the current node
3027
for (i = 0; i < G.length; i++) {
31-
if (G[minIndex][i] && !D[i] && ( S[i] > S[minIndex] + G[minIndex][i])) {
28+
if (G[minIndex][i] && S[i] > S[minIndex] + G[minIndex][i]) {
3229
S[i] = S[minIndex] + G[minIndex][i];
3330
tracer._visit(i, minIndex, S[i]);
34-
tracer._sleep(500);
3531
tracer._leave(i, minIndex, S[i]);
3632
}
3733
}
38-
tracer._leave(minIndex, undefined);
34+
tracer._leave(minIndex);
35+
}
36+
if (S[end] == MAX_VALUE) {
37+
tracer._print('there is no path from ' + start + ' to ' + end);
38+
} else {
39+
tracer._print('the shortest path from ' + start + ' to ' + end + ' is ' + S[end]);
3940
}
40-
tracer._print('the shortest path from ' + s + ' to ' + e + ' is ' + S[e]);
4141
}
4242

4343
var s = Math.random() * G.length | 0; // s = start node
4444
var e; // e = end node
4545
do {
4646
e = Math.random() * G.length | 0;
4747
} while (s == e);
48-
tracer._pace(100);
48+
tracer._pace(500);
4949
tracer._print('finding the shortest path from ' + s + ' to ' + e);
5050
Dijkstra(s, e);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy