
let nodeMap = {
start: {
A: 5,
C: 2
},
A: {
B: 4,
D: 2
},
C: {
D: 7,
A: 8
},
B: {
D: 6,
end: 3
},
D: {
end: 1
}
}
let nodeCostMap = {
end: Infinity
}
let completedNode = []
const getMinCost = () => {
let min = -1
let minKey = ''
for (let key in nodeCostMap) {
if (key !== 'end' && !completedNode.includes(key)) {
if (min !== -1) {
if (min > nodeCostMap[key]) {
min = nodeCostMap[key]
minKey = key
}
} else {
min = nodeCostMap[key]
minKey = key
}
}
}
return { minKey, min }
}
const getMinimum = (data, dataKey, sum) => {
let itemData = data[dataKey]
if (itemData) {
for (let key in itemData) {
if (key in nodeCostMap) {
if (nodeCostMap[key] > itemData[key] + sum) {
nodeCostMap[key] = itemData[key] + sum
}
} else {
nodeCostMap[key] = itemData[key] + sum
}
}
}
completedNode.push(dataKey)
let { minKey, min } = getMinCost()
if (minKey) {
getMinimum(nodeMap, minKey, min)
} else {
return
}
}
getMinimum(nodeMap, 'start', 0)
console.log(nodeCostMap.end)