From a35eaa7832db16547739924c6743332cb0a47e5f Mon Sep 17 00:00:00 2001 From: Sayani Roy <52422374+sayaniroy579@users.noreply.github.com> Date: Thu, 20 Oct 2022 20:08:55 +0530 Subject: [PATCH] =?UTF-8?q?Create=20Dijkstra=E2=80=99s=20Shortest=20Path?= =?UTF-8?q?=20Algorithm.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...a\342\200\231s Shortest Path Algorithm.js" | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 "Dijkstra\342\200\231s Shortest Path Algorithm.js" diff --git "a/Dijkstra\342\200\231s Shortest Path Algorithm.js" "b/Dijkstra\342\200\231s Shortest Path Algorithm.js" new file mode 100644 index 0000000..909d5ca --- /dev/null +++ "b/Dijkstra\342\200\231s Shortest Path Algorithm.js" @@ -0,0 +1,110 @@ +// A Javascript program for Dijkstra's single +// source shortest path algorithm. +// The program is for adjacency matrix +// representation of the graph +let V = 9; + +// A utility function to find the +// vertex with minimum distance +// value, from the set of vertices +// not yet included in shortest +// path tree +function minDistance(dist,sptSet) +{ + + // Initialize min value + let min = Number.MAX_VALUE; + let min_index = -1; + + for(let v = 0; v < V; v++) + { + if (sptSet[v] == false && dist[v] <= min) + { + min = dist[v]; + min_index = v; + } + } + return min_index; +} + +// A utility function to print +// the constructed distance array +function printSolution(dist) +{ + document.write("Vertex \t\t Distance from Source
"); + for(let i = 0; i < V; i++) + { + document.write(i + " \t\t " + + dist[i] + "
"); + } +} + +// Function that implements Dijkstra's +// single source shortest path algorithm +// for a graph represented using adjacency +// matrix representation +function dijkstra(graph, src) +{ + let dist = new Array(V); + let sptSet = new Array(V); + + // Initialize all distances as + // INFINITE and stpSet[] as false + for(let i = 0; i < V; i++) + { + dist[i] = Number.MAX_VALUE; + sptSet[i] = false; + } + + // Distance of source vertex + // from itself is always 0 + dist[src] = 0; + + // Find shortest path for all vertices + for(let count = 0; count < V - 1; count++) + { + + // Pick the minimum distance vertex + // from the set of vertices not yet + // processed. u is always equal to + // src in first iteration. + let u = minDistance(dist, sptSet); + + // Mark the picked vertex as processed + sptSet[u] = true; + + // Update dist value of the adjacent + // vertices of the picked vertex. + for(let v = 0; v < V; v++) + { + + // Update dist[v] only if is not in + // sptSet, there is an edge from u + // to v, and total weight of path + // from src to v through u is smaller + // than current value of dist[v] + if (!sptSet[v] && graph[u][v] != 0 && + dist[u] != Number.MAX_VALUE && + dist[u] + graph[u][v] < dist[v]) + { + dist[v] = dist[u] + graph[u][v]; + } + } + } + + // Print the constructed distance array + printSolution(dist); +} + +// Driver code +let graph = [ [ 0, 4, 0, 0, 0, 0, 0, 8, 0 ], + [ 4, 0, 8, 0, 0, 0, 0, 11, 0 ], + [ 0, 8, 0, 7, 0, 4, 0, 0, 2 ], + [ 0, 0, 7, 0, 9, 14, 0, 0, 0], + [ 0, 0, 0, 9, 0, 10, 0, 0, 0 ], + [ 0, 0, 4, 14, 10, 0, 2, 0, 0], + [ 0, 0, 0, 0, 0, 2, 0, 1, 6 ], + [ 8, 11, 0, 0, 0, 0, 1, 0, 7 ], + [ 0, 0, 2, 0, 0, 0, 6, 7, 0 ] ] +dijkstra(graph, 0); +