From 33d050a0af7ee41ba5e76ca9454a44be2042dbd8 Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Tue, 2 Jun 2020 22:46:44 +0530 Subject: [PATCH 1/2] Created DijkstraSmallestPath.js in Graphs --- Graphs/DijkstraSmallestPath.js | 111 +++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 Graphs/DijkstraSmallestPath.js diff --git a/Graphs/DijkstraSmallestPath.js b/Graphs/DijkstraSmallestPath.js new file mode 100644 index 0000000000..25571ed725 --- /dev/null +++ b/Graphs/DijkstraSmallestPath.js @@ -0,0 +1,111 @@ +// starting at s +function solve (graph, s) { + var solutions = {} + solutions[s] = [] + solutions[s].dist = 0 + + while (true) { + var p = null + var neighbor = null + var dist = Infinity + + for (var n in solutions) { + if (!solutions[n]) { continue } + var ndist = solutions[n].dist + var adj = graph[n] + + for (var a in adj) { + if (solutions[a]) { continue } + + var d = adj[a] + ndist + if (d < dist) { + p = solutions[n] + neighbor = a + dist = d + } + } + } + + // no more solutions + if (dist === Infinity) { + break + } + + // extend parent's solution path + solutions[neighbor] = p.concat(neighbor) + // extend parent's cost + solutions[neighbor].dist = dist + } + + return solutions +} +// create graph +var graph = {} + +var layout = { + R: ['2'], + 2: ['3', '4'], + 3: ['4', '6', '13'], + 4: ['5', '8'], + 5: ['7', '11'], + 6: ['13', '15'], + 7: ['10'], + 8: ['11', '13'], + 9: ['14'], + 10: [], + 11: ['12'], + 12: [], + 13: ['14'], + 14: [], + 15: [] +} + +// convert uni-directional to bi-directional graph +// var graph = { +// a: {e:1, b:1, g:3}, +// b: {a:1, c:1}, +// c: {b:1, d:1}, +// d: {c:1, e:1}, +// e: {d:1, a:1}, +// f: {g:1, h:1}, +// g: {a:3, f:1}, +// h: {f:1} +// }; + +for (var id in layout) { + if (!graph[id]) { graph[id] = {} } + layout[id].forEach(function (aid) { + graph[id][aid] = 1 + if (!graph[aid]) { graph[aid] = {} } + graph[aid][id] = 1 + }) +} + +// choose start node +var start = '10' +// get all solutions +var solutions = solve(graph, start) + +console.log("From '" + start + "' to") +// display solutions +for (var s in solutions) { + if (!solutions[s]) continue + console.log(' -> ' + s + ': [' + solutions[s].join(', ') + '] (dist:' + solutions[s].dist + ')') +} + +// From '10' to +// -> 2: [7, 5, 4, 2] (dist:4) +// -> 3: [7, 5, 4, 3] (dist:4) +// -> 4: [7, 5, 4] (dist:3) +// -> 5: [7, 5] (dist:2) +// -> 6: [7, 5, 4, 3, 6] (dist:5) +// -> 7: [7] (dist:1) +// -> 8: [7, 5, 4, 8] (dist:4) +// -> 9: [7, 5, 4, 3, 13, 14, 9] (dist:7) +// -> 10: [] (dist:0) +// -> 11: [7, 5, 11] (dist:3) +// -> 12: [7, 5, 11, 12] (dist:4) +// -> 13: [7, 5, 4, 3, 13] (dist:5) +// -> 14: [7, 5, 4, 3, 13, 14] (dist:6) +// -> 15: [7, 5, 4, 3, 6, 15] (dist:6) +// -> R: [7, 5, 4, 2, R] (dist:5) From ea3b609bd6085c613e6357b8d4f0a161b33eff10 Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Tue, 2 Jun 2020 22:47:17 +0530 Subject: [PATCH 2/2] Deleted DijkstraSmallestPath.js from Maths --- Maths/DijkstraSmallestPath.js | 111 ---------------------------------- 1 file changed, 111 deletions(-) delete mode 100644 Maths/DijkstraSmallestPath.js diff --git a/Maths/DijkstraSmallestPath.js b/Maths/DijkstraSmallestPath.js deleted file mode 100644 index 25571ed725..0000000000 --- a/Maths/DijkstraSmallestPath.js +++ /dev/null @@ -1,111 +0,0 @@ -// starting at s -function solve (graph, s) { - var solutions = {} - solutions[s] = [] - solutions[s].dist = 0 - - while (true) { - var p = null - var neighbor = null - var dist = Infinity - - for (var n in solutions) { - if (!solutions[n]) { continue } - var ndist = solutions[n].dist - var adj = graph[n] - - for (var a in adj) { - if (solutions[a]) { continue } - - var d = adj[a] + ndist - if (d < dist) { - p = solutions[n] - neighbor = a - dist = d - } - } - } - - // no more solutions - if (dist === Infinity) { - break - } - - // extend parent's solution path - solutions[neighbor] = p.concat(neighbor) - // extend parent's cost - solutions[neighbor].dist = dist - } - - return solutions -} -// create graph -var graph = {} - -var layout = { - R: ['2'], - 2: ['3', '4'], - 3: ['4', '6', '13'], - 4: ['5', '8'], - 5: ['7', '11'], - 6: ['13', '15'], - 7: ['10'], - 8: ['11', '13'], - 9: ['14'], - 10: [], - 11: ['12'], - 12: [], - 13: ['14'], - 14: [], - 15: [] -} - -// convert uni-directional to bi-directional graph -// var graph = { -// a: {e:1, b:1, g:3}, -// b: {a:1, c:1}, -// c: {b:1, d:1}, -// d: {c:1, e:1}, -// e: {d:1, a:1}, -// f: {g:1, h:1}, -// g: {a:3, f:1}, -// h: {f:1} -// }; - -for (var id in layout) { - if (!graph[id]) { graph[id] = {} } - layout[id].forEach(function (aid) { - graph[id][aid] = 1 - if (!graph[aid]) { graph[aid] = {} } - graph[aid][id] = 1 - }) -} - -// choose start node -var start = '10' -// get all solutions -var solutions = solve(graph, start) - -console.log("From '" + start + "' to") -// display solutions -for (var s in solutions) { - if (!solutions[s]) continue - console.log(' -> ' + s + ': [' + solutions[s].join(', ') + '] (dist:' + solutions[s].dist + ')') -} - -// From '10' to -// -> 2: [7, 5, 4, 2] (dist:4) -// -> 3: [7, 5, 4, 3] (dist:4) -// -> 4: [7, 5, 4] (dist:3) -// -> 5: [7, 5] (dist:2) -// -> 6: [7, 5, 4, 3, 6] (dist:5) -// -> 7: [7] (dist:1) -// -> 8: [7, 5, 4, 8] (dist:4) -// -> 9: [7, 5, 4, 3, 13, 14, 9] (dist:7) -// -> 10: [] (dist:0) -// -> 11: [7, 5, 11] (dist:3) -// -> 12: [7, 5, 11, 12] (dist:4) -// -> 13: [7, 5, 4, 3, 13] (dist:5) -// -> 14: [7, 5, 4, 3, 13, 14] (dist:6) -// -> 15: [7, 5, 4, 3, 6, 15] (dist:6) -// -> R: [7, 5, 4, 2, R] (dist:5)