Я пытаюсь применить BFS, чтобы найти длину кратчайшего пути в графике, но не совсем получаю правильный результат.
Я пытаюсь найти кратчайший путь, посещая каждый узел на графике;затем отметьте те, которые посещены, и продолжайте записывать длину пути.Я надеюсь вернуть массив, который содержит кратчайший путь, но я думаю, что я делаю что-то не так в этом процессе.
Я думаю, это как-то связано с тем, как я индексирую свои массивы и записываю свои расстояния.
Мой вход в настоящее время отформатирован в виде массива, который содержит соседей для каждой вершины i
.Так, например, graph[i]
даст вам массив соседей вершины i
.
Любые мысли о том, как мне решить проблему, были бы очень полезны.Спасибо!
var shortestPathLength = function(graph) {
let distances = []
let pq = []
distances[0] = 0
let mygraph = {}
for (var i = 0; i<graph.length; i++) {
distances[i] = -1
mygraph[i] = graph[i]
}
pq.push(mygraph[0])
while(pq.length > 0) {
let min_node = pq.shift()
for(var i = 0; i<min_node.length; i++) {
candidate = distances[i] + 1
if(distances[min_node[i]]== -1) {
distances[min_node[i]] = distances[i] + 1
pq.push(graph[min_node[i]])
}
else if (candidate < distances[min_node[i]]) {
distances[min_node[i]] = distances[i] + 1
}
}
}
function getSum(total, num) {
return total + num;
}
console.log(distances)
return distances.length
};