gpt4 book ai didi

javascript - 试图用字典找到最短路线?

转载 作者:行者123 更新时间:2023-12-03 02:39:09 25 4
gpt4 key购买 nike

我目前正在创建一个 findPath() 函数。希望下面的代码可以解决任何问题。我正在使用 JavaScript 工作。基本上,findPath() 函数采用参数fromto 以及可选的stack。我已经能够使我的函数正常工作,但是我希望它能够获得最短的路径。这是我当前的代码:

function findPath(from, to, stack){
if(!stack) stack = [from];
var opts = getTravelOptions(from);
var aSt = [];
for(var i = 0; i < opts.length; ++i){
if(stack.indexOf(opts[i]) >= 0) continue; //No Circles
stack.push(opts[i]);
if(to == opts[i]){
return stack; //Shortest possible
}else{
var news = findPath(opts[i],to,stack);
if(news.length > 0){
aSt.push(news);
//return news;
}
}
stack.pop();
}


var shortest = [];
for(var i2 = 0; i2 < aSt.length; i2++){
if(shortest.length == 0) shortest = aSt[i2];
if(shortest.length > aSt[i2].length) shortest = aSt[i2];
}
return shortest;
}
function getTravelOptions(from){
var map = {
'Sanfew': ['Lisim','Rynir Mines'],
'Lisim': ['Sanfew','Rynir Mines','Valera'],
'Valera': ['Endarx','Isri', 'Lisim'],
'Endarx': ['Rile','Valera'],
'Rile': ['Endarx'],
'Isri': ['Valera','Eully'],
'Eully': ['Isri','Harith'],
'Harith': ['Eully', 'Port Senyn'],
'Port Senyn': ['Harith'],
'Rynir Mines': ['Sanfew','Lisim','Harith']
};
if(!from) return Object.keys(map);
return map[from];
}

我的问题是,当我尝试创建所有可能路线的 aSt 数组时,我得到了错误的答案。

findPath("Isri","Harith") 的正确答案应该是 ['Isri','Eully','Harith']。然而,我得到了[“Isri”,“Valera”,“Lisim”,“Eully”]。我缺少什么?这里出了什么问题?

最佳答案

问题是 Javascript 通过引用而不是通过值传递数组。只需将递归调用更改为使用 stack.slice(0) 而不是 stack 即可创建数组的“影子”副本。

关于javascript - 试图用字典找到最短路线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48404034/

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