javascript映射所有路径
我无法解决以下问题。在第1点,我可以转到第2点或第5点。从点到点我可以到3或4。从第五点开始,我可以到第六点或第七点。从7到9只有一条路。我想计算所有完整的路径。我不是在寻找最快的路线或任何东西。我需要以一种我可以很容易地遵循的方式来选择那里的所有路径 我有两个问题: 我不确定我是否使用了正确的方式来“存储”选项a[1]=[2,5]。这样行吗,还是有更好的办法 我不知道如何解决这个问题。有人能给我一个线索吗?我希望我看的方向是正确的:- 路径:javascript映射所有路径,javascript,Javascript,我无法解决以下问题。在第1点,我可以转到第2点或第5点。从点到点我可以到3或4。从第五点开始,我可以到第六点或第七点。从7到9只有一条路。我想计算所有完整的路径。我不是在寻找最快的路线或任何东西。我需要以一种我可以很容易地遵循的方式来选择那里的所有路径 我有两个问题: 我不确定我是否使用了正确的方式来“存储”选项a[1]=[2,5]。这样行吗,还是有更好的办法 我不知道如何解决这个问题。有人能给我一个线索吗?我希望我看的方向是正确的:- 路径: 1 ->2 ->3
1 ->2 ->3
->4
->5 ->6
->7 ->8 ->9
以及预期的结果:
1,2,3
1,2,4
1,5,6
1,5,7,8,9
我试图用javascript解决这个问题
// this doesn't do what I need
var a = [];
a[1]=[2,5];
a[2]=[3,4];
a[5]=[6,7];
a[7]=[8];
a[8]=[9];
trytoloop(a,1);
function trytoloop(a,key){
if(a[key]){
for (var y in a[key]){
document.write(key);
trytoloop(a,a[key][y]);
}
} else {
document.write(key);
}
}
我在下面列出了一个解决方案,但如果你不想要破坏者,请不要看!它只处理图中没有循环的情况 在不给出答案的情况下给出一些提示:我建议在递归函数中,您在第二个参数中跟踪到目前为止的整个路径,而不仅仅是当前位置,因为否则您将得到一个访问过的位置列表,但是您如何知道到达每个位置的路径?其次,在Javascript中,使用for遍历数组被认为是不好的做法。。。在构造中,因此可以使用从0到数组长度的正则for循环。第三,你想在某一点打印出构建的路径,但你不想在每一步都打印出来:相反,你想在路径完成后打印出来;也就是说,当当前位置没有更多地方可去时。最后,我将document.write替换为console.log,因为我相信document.write会在每次打印时覆盖文档内容
var a = [];
a[1]=[2,5];
a[2]=[3,4];
a[5]=[6,7];
a[7]=[8,9];
trytoloop(a,[1]);
function trytoloop(a,path){
var last = path[path.length - 1];
var next_hops = a[last];
// if there could be cycles, you might want to check that next_hops doesn't
// contain any already visited locations
if (next_hops) {
for (var i = 0; i < next_hops.length; i++) {
var new_path = path.concat([next_hops[i]]);
trytoloop(a, new_path);
}
} else {
console.log(path);
}
}
我在下面列出了一个解决方案,但如果你不想要破坏者,请不要看!它只处理图中没有循环的情况 在不给出答案的情况下给出一些提示:我建议在递归函数中,您在第二个参数中跟踪到目前为止的整个路径,而不仅仅是当前位置,因为否则您将得到一个访问过的位置列表,但是您如何知道到达每个位置的路径?其次,在Javascript中,使用for遍历数组被认为是不好的做法。。。在构造中,因此可以使用从0到数组长度的正则for循环。第三,你想在某一点打印出构建的路径,但你不想在每一步都打印出来:相反,你想在路径完成后打印出来;也就是说,当当前位置没有更多地方可去时。最后,我将document.write替换为console.log,因为我相信document.write会在每次打印时覆盖文档内容
var a = [];
a[1]=[2,5];
a[2]=[3,4];
a[5]=[6,7];
a[7]=[8,9];
trytoloop(a,[1]);
function trytoloop(a,path){
var last = path[path.length - 1];
var next_hops = a[last];
// if there could be cycles, you might want to check that next_hops doesn't
// contain any already visited locations
if (next_hops) {
for (var i = 0; i < next_hops.length; i++) {
var new_path = path.concat([next_hops[i]]);
trytoloop(a, new_path);
}
} else {
console.log(path);
}
}
您没有跟踪到迄今为止已建立的部分路径。不过,阵列的想法似乎不错。下面是一个工作版本,其中包含一些更有意义的名称:
您没有跟踪到迄今为止已建立的部分路径。不过,阵列的想法似乎不错。下面是一个工作版本,其中包含一些更有意义的名称:
我还没有试过这个,但在我的脑海里,你可以尝试以下几点:
// use an object, and set the numbers as keys and the values as the child options
var a = {};
a[1] = {2:{3:{},4:{}},5:{6:{},7:{8:{9:{}}}}};
(function trytoloop(obj,num,str){
if(str.length>0) str += ',';
str += num
if(Object.keys(obj).length==0) document.writeln(str+'<br />');
else for(var key in obj) trytoloop(obj[key],key,str);
})(a[1],1,'');
我还没有试过这个,但在我的脑海里,你可以尝试以下几点:
// use an object, and set the numbers as keys and the values as the child options
var a = {};
a[1] = {2:{3:{},4:{}},5:{6:{},7:{8:{9:{}}}}};
(function trytoloop(obj,num,str){
if(str.length>0) str += ',';
str += num
if(Object.keys(obj).length==0) document.writeln(str+'<br />');
else for(var key in obj) trytoloop(obj[key],key,str);
})(a[1],1,'');
以下是我的解决方案:
它的最终输出将进入控制台,您可以在这里更改初始节点console.loggetPaths1;根据您的要求从节点1开始。以下是我的解决方案:
它的最终输出将进入控制台,您可以在这里更改初始节点console.loggetPaths1;根据您的要求从节点1开始。是否应该是[7]=[8];a[8]=[9];?你的图表中有循环吗?在这种情况下,您需要决定如何处理它们。不是将半随机值写入HTML,而是收集数组数组中的所有路径。也可以考虑将TytoLoopo重命名为更有意义的东西——它将帮助你理解你想要做的……用VaR Y=0代替[V]中的var Y;它不应该是一个[7]=[8];a[8]=[9];?你的图表中有循环吗?在这种情况下,您需要决定如何处理它们。不是将半随机值写入HTML,而是收集数组数组中的所有路径。也可以考虑将TytoLoopo重命名为更有意义的东西——它将帮助你理解你想要做的……用VaR Y=0代替[V]中的var Y;在Javascript中,您不能使用for遍历数组。。。这有点误导。有很好的理由不这么做,但它仍然是可能的。很好的一点,我会编辑它。请看解释。谢谢!我仍在努力思考这个问题,但有了这些例子,我相信我会明白的。我也会看看链接!在Javascript中,不能使用for遍历数组。。。这有点误导。有好的
不这么做的原因是,它仍然是可能的。好的观点,我会编辑它。请看解释。谢谢!我仍在努力思考这个问题,但有了这些例子,我相信我会明白的。我也会看看链接!