Skip to content

Commit 7ca3162

Browse files
committed
Update bellman ford, edge and spec
1 parent d0a1358 commit 7ca3162

File tree

3 files changed

+28
-23
lines changed

3 files changed

+28
-23
lines changed

src/data-structures/edge.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
* @module data-structures/edge
1313
*/
1414
exports.Edge = function (e, v, distance) {
15-
this.e = e;
16-
this.v = v;
15+
this.from = e;
16+
this.to = v;
1717
this.distance = distance;
1818
};
1919

src/graphs/shortest-path/bellman-ford.js

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -60,25 +60,27 @@
6060
var distances = {};
6161
var parents = {};
6262
var c;
63-
for (var i = 0; i < vertexes.length; i += 1) {
64-
distances[vertexes[i].id] = Infinity;
65-
parents[vertexes[i].id] = null;
66-
}
67-
distances[source] = 0;
68-
for (i = 0; i < vertexes.length - 1; i += 1) {
69-
for (var j = 0; j < edges.length; j += 1) {
70-
c = edges[j];
71-
if (distances[c.from.id] + c.distance < distances[c.to.id]) {
72-
distances[c.to.id] = distances[c.from.id] + c.distance;
73-
parents[c.to.id] = c.from.id;
63+
if (source) {
64+
for (var i = 0; i < vertexes.length; i += 1) {
65+
distances[vertexes[i].id] = Infinity;
66+
parents[vertexes[i].id] = null;
67+
}
68+
distances[source.id] = 0;
69+
for (i = 0; i < vertexes.length - 1; i += 1) {
70+
for (var j = 0; j < edges.length; j += 1) {
71+
c = edges[j];
72+
if (distances[c.from.id] + c.distance < distances[c.to.id]) {
73+
distances[c.to.id] = distances[c.from.id] + c.distance;
74+
parents[c.to.id] = c.from.id;
75+
}
7476
}
7577
}
76-
}
7778

78-
for (i = 0; i < edges.length; i += 1) {
79-
c = edges[i];
80-
if (distances[c.from.id] + c.distance < distances[c.to.id]) {
81-
return undefined;
79+
for (i = 0; i < edges.length; i += 1) {
80+
c = edges[i];
81+
if (distances[c.from.id] + c.distance < distances[c.to.id]) {
82+
return undefined;
83+
}
8284
}
8385
}
8486

test/graphs/shortest-path/bellman-ford.spec.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,23 @@ describe('Bellman-Ford', function () {
1414
var vs = [];
1515
var e = [];
1616
expect(bellmanFord(vs, e, undefined))
17-
.toEqual({ parents: {}, distances: { undefined: 0 } });
17+
.toEqual({ parents: {}, distances: {} });
1818
});
1919

2020
it('should work for a graph with a single vertex', function () {
2121
var vs = [new Vertex(1)];
2222
var e = [];
23-
expect(bellmanFord(vs, e, 1))
23+
expect(bellmanFord(vs, e, vs[0]))
2424
.toEqual({ parents: { '1': null }, distances: { '1': 0 }});
2525
});
2626

2727
it('should work in the general case', function () {
2828
var vs = [new Vertex(1), new Vertex(2), new Vertex(3)];
29-
var e = [];
30-
expect(bellmanFord(vs, e, 1))
31-
.toEqual({ parents: { '1': null }, distances: { '1': 0 }});
29+
var e = [new Edge(vs[0], vs[1], 2),
30+
new Edge(vs[0], vs[2], 10),
31+
new Edge(vs[1], vs[2], 1)
32+
];
33+
var output = bellmanFord(vs, e, vs[0]);
34+
expect(output.distances['3']).toBe(3);
3235
});
3336
});

0 commit comments

Comments
 (0)