Advertisement
Guest User

Untitled

a guest
May 27th, 2019
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. function djikstraAlgorithm(startNode) {
  2. let distances = {};
  3.  
  4. // Stores the reference to previous nodes
  5. let prev = {};
  6. let pq = new PriorityQueue(this.nodes.length * this.nodes.length);
  7.  
  8. // Set distances to all nodes to be infinite except startNode
  9. distances[startNode] = 0;
  10. pq.enqueue(startNode, 0);
  11. this.nodes.forEach(node => {
  12. if (node !== startNode) distances[node] = Infinity;
  13. prev[node] = null;
  14. });
  15.  
  16. while (!pq.isEmpty()) {
  17. let minNode = pq.dequeue();
  18. let currNode = minNode.data;
  19. let weight = minNode.priority;
  20. this.edges[currNode].forEach(neighbor => {
  21. let alt = distances[currNode] + neighbor.weight;
  22. if (alt < distances[neighbor.node]) {
  23. distances[neighbor.node] = alt;
  24. prev[neighbor.node] = currNode;
  25. pq.enqueue(neighbor.node, distances[neighbor.node]);
  26. }
  27. });
  28. }
  29. return distances;
  30. }
  31.  
  32. class Graph {
  33. constructor() {
  34. this.edges = {};
  35. this.nodes = [];
  36. }
  37. addNode(node) {
  38. this.nodes.push(node);
  39. this.edges[node] = [];
  40. }
  41. addEdge(node1, node2) {
  42. this.edges[node1].push(node2);
  43. this.edges[node2].push(node1);
  44. }
  45. addDirectedEdge(node1, node2) {
  46. this.edges[node1].push(node2);
  47. }
  48. display() {
  49. let graph = ""; this.nodes.forEach(node => {
  50. graph += node + "->" + this.edges[node].join(", ") + "\n";
  51. });
  52. console.log(graph);
  53. }
  54. }
  55.  
  56. let g = new Graph();
  57. g.addNode("A");
  58. g.addNode("B");
  59. g.addNode("C");
  60. g.addNode("D");
  61. g.addNode("E");
  62. g.addNode("F");
  63. g.addNode("G");
  64.  
  65. g.addDirectedEdge("A", "C", 100);
  66. g.addDirectedEdge("A", "B", 3);
  67. g.addDirectedEdge("A", "D", 4);
  68. g.addDirectedEdge("D", "C", 3);
  69. g.addDirectedEdge("D", "E", 8);
  70. g.addDirectedEdge("E", "F", 10);
  71. g.addDirectedEdge("B", "G", 9);
  72. g.addDirectedEdge("E", "G", 50);
  73.  
  74. var test = g.djikstraAlgorithm("A");
  75. console.log(test);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement