Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript映射所有路径_Javascript - Fatal编程技术网

javascript映射所有路径

javascript映射所有路径,javascript,Javascript,我无法解决以下问题。在第1点,我可以转到第2点或第5点。从点到点我可以到3或4。从第五点开始,我可以到第六点或第七点。从7到9只有一条路。我想计算所有完整的路径。我不是在寻找最快的路线或任何东西。我需要以一种我可以很容易地遵循的方式来选择那里的所有路径 我有两个问题: 我不确定我是否使用了正确的方式来“存储”选项a[1]=[2,5]。这样行吗,还是有更好的办法 我不知道如何解决这个问题。有人能给我一个线索吗?我希望我看的方向是正确的:- 路径: 1 ->2 ->3

我无法解决以下问题。在第1点,我可以转到第2点或第5点。从点到点我可以到3或4。从第五点开始,我可以到第六点或第七点。从7到9只有一条路。我想计算所有完整的路径。我不是在寻找最快的路线或任何东西。我需要以一种我可以很容易地遵循的方式来选择那里的所有路径

我有两个问题:

我不确定我是否使用了正确的方式来“存储”选项a[1]=[2,5]。这样行吗,还是有更好的办法

我不知道如何解决这个问题。有人能给我一个线索吗?我希望我看的方向是正确的:-

路径:

  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遍历数组。。。这有点误导。有好的
不这么做的原因是,它仍然是可能的。好的观点,我会编辑它。请看解释。谢谢!我仍在努力思考这个问题,但有了这些例子,我相信我会明白的。我也会看看链接!