gpt4 book ai didi

javascript - Javascript 中的广度优先搜索

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

function BFS_search(data, start, ende){
var queue = new Array();
var steps = 0;
for(var x=0; x<data.Adjazenzen.length-1; x++){ //push start Element in Queue
if(data.Adjazenzen[x] == start){
queue.push(data.Adjazenzen[x]);
steps++;
break;
}
}

while(queue.length != 0) {
var t = queue.pop();
if(t.Von == ende) {
return t.Von;
}
if(t.Nach == ende){
return t.Nach;
}
else{
queue.push(data.Adjazenzen[0]);
data.Adjazenzen.shift();
steps++;
break;
}
}
return "keine Ergebnis";
}

此代码片段应从给定的 JSON 对象计算两点之间的最佳路线,并添加开始节点和结束节点之间的所有点。基本上它应该是一个使用 BFS 的导航系统。

JSON 对象如下所示:

{"Adjazenzen":[
{"Von":"A1.02","Nach":"G-A3-1","X":"5778","Y":"223","Z":"3","Treppe":"0","Gebaeude":"A","Level":"0"},
{"Von":"A1.04","Nach":"G-A3-1","X":"5025","Y":"223","Z":"3","Treppe":"0","Gebaeude":"A","Level":"0"},
{"Von":"A1.05","Nach":"G-A3-1","X":"4212","Y":"223","Z":"3","Treppe":"0","Gebaeude":"A","Level":"0"},
{"Von":"A1.06","Nach":"G-A3-1","X":"3016","Y":"223","Z":"3","Treppe":"0","Gebaeude":"A","Level":"0"},
{"Von":"A1.07","Nach":"G-A3-1","X":"2354","Y":"223","Z":"3","Treppe":"0","Gebaeude":"A","Level":"0"},
{"Von":"A1.08","Nach":"G-A3-1","X":"1856","Y":"223","Z":"3","Treppe":"1","Gebaeude":"A","Level":"0"},
{"Von":"A1.12","Nach":"G-A3-1","X":"1313","Y":"223","Z":"3","Treppe":"0","Gebaeude":"A","Level":"0"},
{"Von":"B1.01","Nach":"G-B3-1","X":"6572","Y":"223","Z":"3","Treppe":"1","Gebaeude":"B","Level":"0"},
{"Von":"G-A3-1","Nach":"G-A3-2","X":"906","Y":"223","Z":"3","Treppe":{},"Gebaeude":{},"Level":{}},
{"Von":"G-A3-1","Nach":"B1.01","X":"6572","Y":"223","Z":"3","Treppe":"1","Gebaeude":"B","Level":"0"},
{"Von":"G-A3-2","Nach":"A1.14","X":"1066","Y":"1333","Z":"3","Treppe":"0","Gebaeude":"A","Level":"0"},
{"Von":"G-A3-2","Nach":"G-A3-3","X":"1444","Y":"4016","Z":"3","Treppe":{},"Gebaeude":{},"Level":{}},
{"Von":"G-A3-2","Nach":"A1.15","X":"1207","Y":"2340","Z":"3","Treppe":"0","Gebaeude":"A","Level":"0"},
{"Von":"G-A3-2","Nach":"A1.18","X":"1444","Y":"4016","Z":"3","Treppe":"0","Gebaeude":"A","Level":"0"},
{"Von":"G-A3-2","Nach":"A1.16","X":"1327","Y":"3188","Z":"3","Treppe":"0","Gebaeude":"A","Level":"0"},
{"Von":"G-A3-2","Nach":"A1.13","X":"933","Y":"383","Z":"3","Treppe":"0","Gebaeude":"A","Level":"0"},
{"Von":"G-A3-2","Nach":"A1.17","X":"1425","Y":"3884","Z":"3","Treppe":"0","Gebaeude":"A","Level":"0"},
{"Von":"G-A3-3","Nach":"A1.19","X":"2691","Y":"3977","Z":"3","Treppe":"1","Gebaeude":"A","Level":"0"},
{"Von":"G-A3-3","Nach":"A1.22","X":"2946","Y":"3969","Z":"3","Treppe":"0","Gebaeude":"A","Level":"0"},
{"Von":"G-A3-3","Nach":"A1.23","X":"2946","Y":"3969","Z":"3","Treppe":"0","Gebaeude":"A","Level":"0"},
{"Von":"G-A3-3","Nach":"A1.20","X":"1990","Y":"4002","Z":"3","Treppe":"0","Gebaeude":"A","Level":"0"}]}

您可以忽略除 Von(从)和 Nach(到)以外的所有内容。问题是我的 BFS 不是 100% 工作,我不知道如何修复它。

一个例子:如果你想从 A1.04 计算到 A1.15,它应该添加:A1.04、G-A3-1、G-A3-2、A1.15

如果你想从 A1.04 到 A1.20:A1.04、G-A3-1、G-A3-2、G-A3-3、A1.20

希望你能帮我解决这个问题。

最佳答案

我注意到的第一件事是 queue.push(...)queue.pop() 将无法正常工作,因为您已经有了是一个堆栈,这意味着您正在进行深度优先搜索而不是广度优先搜索。

回想一下,队列是一个 FIFO 容器。因此,使用 queue.push(...)(将一个元素添加到数组的末尾)和 queue.shift()(从数组中删除一个元素)数组的前面)。基本上,shift() 类似于队列上的dequeue() 操作。

关于javascript - Javascript 中的广度优先搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16244748/

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