mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 00:01:37 +08:00

* chore: Switch to Node 20 + Vitest * chore: migrate to vitest mock functions * chore: code style (switch to prettier) * test: re-enable long-running test Seems the switch to Node 20 and Vitest has vastly improved the code's and / or the test's runtime! see #1193 * chore: code style * chore: fix failing tests * Updated Documentation in README.md * Update contribution guidelines to state usage of Prettier * fix: set prettier printWidth back to 80 * chore: apply updated code style automatically * fix: set prettier line endings to lf again * chore: apply updated code style automatically --------- Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
48 lines
847 B
JavaScript
48 lines
847 B
JavaScript
// starting at s
|
|
function solve(graph, s) {
|
|
const solutions = {}
|
|
solutions[s] = []
|
|
solutions[s].dist = 0
|
|
|
|
while (true) {
|
|
let p = null
|
|
let neighbor = null
|
|
let dist = Infinity
|
|
|
|
for (const n in solutions) {
|
|
if (!solutions[n]) {
|
|
continue
|
|
}
|
|
const ndist = solutions[n].dist
|
|
const adj = graph[n]
|
|
|
|
for (const a in adj) {
|
|
if (solutions[a]) {
|
|
continue
|
|
}
|
|
|
|
const 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
|
|
}
|
|
|
|
export { solve }
|