Add Dijkstra.

This commit is contained in:
Oleksii Trekhleb
2018-05-03 06:54:51 +03:00
parent ce7a4a930f
commit c97e472db7
2 changed files with 15 additions and 2 deletions

View File

@ -43,7 +43,7 @@ describe('dijkstra', () => {
.addEdge(edgeFG)
.addEdge(edgeEG);
const distances = dijkstra(graph, vertexA);
const { distances, previousVertices } = dijkstra(graph, vertexA);
expect(distances).toEqual({
H: Infinity,
@ -55,5 +55,11 @@ describe('dijkstra', () => {
G: 12,
F: 11,
});
expect(previousVertices.F.getKey()).toBe('D');
expect(previousVertices.D.getKey()).toBe('B');
expect(previousVertices.B.getKey()).toBe('A');
expect(previousVertices.G.getKey()).toBe('E');
expect(previousVertices.C.getKey()).toBe('A');
});
});

View File

@ -7,6 +7,7 @@ import PriorityQueue from '../../../data-structures/priority-queue/PriorityQueue
export default function dijkstra(graph, startVertex) {
const distances = {};
const visitedVertices = {};
const previousVertices = {};
const queue = new PriorityQueue();
// Init all distances with infinity assuming that currently we can't reach
@ -38,6 +39,9 @@ export default function dijkstra(graph, startVertex) {
if (queue.hasValue(neighbor)) {
queue.changePriority(neighbor, distances[neighbor.getKey()]);
}
// Remember previous vertex.
previousVertices[neighbor.getKey()] = currentVertex;
}
// Add neighbor to the queue for further visiting.
@ -51,5 +55,8 @@ export default function dijkstra(graph, startVertex) {
visitedVertices[currentVertex.getKey()] = currentVertex;
}
return distances;
return {
distances,
previousVertices,
};
}