gpt4 book ai didi

javascript - 使用 BFS (javascript) 查找最短路径未加权图

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:39:43 25 4
gpt4 key购买 nike

我正在尝试应用 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

};

最佳答案

你的问题是candidate = distances[i] + 1imin_node 内边的索引,这一点都不有趣。您要查找的是当前到 min_node 的距离。您需要将距离分配为 min_node 对象本身的属性,或者您需要存储队列中节点的 ID(graph 中的索引)而不是对象本身。

我做了一些其他的简化,但您的代码中唯一的问题是距离查找。

function shortestPathLength = function(graph) {
const distances = Array(graph.length).fill(-1);
distances[0] = 0; // start node
const queue = [0];

while (queue.length > 0) {
const node_index = queue.shift();
// ^^^^^
const edges = graph[node_index]; // get the node itself
const candidate = distances[node_index] + 1; // outside of the loop
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
for (const target in edges) {
if (distances[target] == -1) {
distances[target] = candidate;
queue.push(target); // not graph[target]
// ^^^^^^
}
}
}
return distances;
}

关于javascript - 使用 BFS (javascript) 查找最短路径未加权图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52901344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com