function findLowestCostNode () {
let lowestCost = Infinity
let lowestCostNode = null
for (let i in costs) {
if (costs[i] <= lowestCost && processed.indexOf(i) < 0) {
lowestCost = costs[i]
lowestCostNode = i
}
}
return lowestCostNode
}
遍历最小开销的节点的邻居,修改开销表和父级表中的数据
function dijkstra () {
let node = findLowestCostNode()
if (!node) {
return
}
let cost = costs[node] // 记录起点到当前节点的开销
let neiber = graph[node]
for (let i in neiber) {
let newCost = neiber[i] + cost
if (costs[i] > newCost) {
costs[i] = newCost
parents[i] = node
}
}
processed.push(node)
dijkstra()
}
调用和结果打印
dijkstra()
let arr = ['F']
function printPath (node) {
console.log(parents[node])
if (parents[node] !== undefined) {
arr.unshift(parents[node])
printPath(parents[node])
}
}
printPath('F')
console.log('最短路径:', arr.join('->'))
console.log('最短用时:', costs.F)