Skip to content

Commit 7a93107

Browse files
committed
fix kruskal
1 parent bdf2699 commit 7a93107

File tree

2 files changed

+46
-44
lines changed

2 files changed

+46
-44
lines changed
Lines changed: 44 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,51 @@
1-
function kruskal () {
2-
var vcount = G.length;
3-
4-
// Preprocess: sort edges by weight.
5-
var edges = [];
6-
for (var vi = 0; vi < vcount - 1; vi++) {
7-
for (var vj = vi + 1; vj < vcount; vj++) {
8-
edges.push({
9-
0: vi,
10-
1: vj,
11-
weight: G[vi][vj]
12-
});
1+
function kruskal() {
2+
var vcount = G.length;
3+
4+
// Preprocess: sort edges by weight.
5+
var edges = [];
6+
for (var vi = 0; vi < vcount - 1; vi++) {
7+
for (var vj = vi + 1; vj < vcount; vj++) {
8+
edges.push({
9+
0: vi,
10+
1: vj,
11+
weight: G[vi][vj]
12+
});
13+
}
1314
}
14-
}
15-
edges.sort(function (ei, ej) { return ei.weight - ej.weight });
16-
17-
// Give each vertex a tree to decide if they are already in the same tree.
18-
var t = [];
19-
for (var i = 0; i < vcount; i++) {
20-
t[i] = {};
21-
t[i][i] = true;
22-
}
23-
24-
var wsum = 0;
25-
for (var n = 0; n < vcount - 1 && edges.length > 0;) {
26-
var e = edges.shift(); // Get the edge of min weight
27-
tracer._visit(e[0], e[1]);
28-
if (t[e[0]] === t[e[1]]) {
29-
// e[0] & e[1] already in the same tree, ignore
30-
tracer._leave(e[0], e[1]);
31-
continue;
15+
edges.sort(function (ei, ej) {
16+
return ei.weight - ej.weight
17+
});
18+
19+
// Give each vertex a tree to decide if they are already in the same tree.
20+
var t = [];
21+
for (var i = 0; i < vcount; i++) {
22+
t[i] = {};
23+
t[i][i] = true;
3224
}
3325

34-
// Choose the current edge.
35-
wsum += e.weight;
36-
37-
// Merge tree of e[0] & e[1]
38-
var tmerged = {};
39-
for (i in t[e[0]]) tmerged[i] = true;
40-
for (i in t[e[1]]) tmerged[i] = true;
41-
for (i in tmerged) t[i] = tmerged;
42-
43-
n += 1;
44-
}
26+
var wsum = 0;
27+
for (var n = 0; n < vcount - 1 && edges.length > 0;) {
28+
var e = edges.shift(); // Get the edge of min weight
29+
tracer._visit(e[0], e[1])._wait();
30+
if (t[e[0]] === t[e[1]]) {
31+
// e[0] & e[1] already in the same tree, ignore
32+
tracer._leave(e[0], e[1])._wait();
33+
continue;
34+
}
35+
36+
// Choose the current edge.
37+
wsum += e.weight;
38+
39+
// Merge tree of e[0] & e[1]
40+
var tmerged = {};
41+
for (i in t[e[0]]) tmerged[i] = true;
42+
for (i in t[e[1]]) tmerged[i] = true;
43+
for (i in tmerged) t[i] = tmerged;
44+
45+
n += 1;
46+
}
4547

46-
tracer._print("The sum of all edges is: " + wsum);
48+
logger._print("The sum of all edges is: " + wsum);
4749
}
4850

49-
tracer._pace(500);
5051
kruskal();
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
var tracer = new WeightedUndirectedGraphTracer();
2+
var logger = new LogTracer();
23
/*var G = [ // G[i][j] indicates the weight of the path from the i-th node to the j-th node
34
[0, 3, 0, 1, 0],
45
[5, 0, 1, 2, 4],
@@ -7,4 +8,4 @@ var tracer = new WeightedUndirectedGraphTracer();
78
[0, 1, 3, 0, 0]
89
];*/
910
var G = WeightedUndirectedGraph.random(5, 1, 1, 9);
10-
tracer._setData(G);
11+
tracer._setData(G);

0 commit comments

Comments
 (0)