【问题标题】:How can I loop through all nodes in all paths?如何循环遍历所有路径中的所有节点?
【发布时间】:2015-04-19 01:57:08
【问题描述】:

我有一个有 4 个成员的数组,我需要尝试所有循环组合,例如

0 -> 1 -> 3 -> 2
0 -> 1 -> 2 -> 3
0 -> 2 -> 1 -> 3
0 -> 2 -> 3 -> 1
0 -> 3 -> 2 -> 1
0 -> 3 -> 1 -> 2

这将导致 6 个不同的结果,然后我将比较这些结果并找到最好的一个。我浪费了我的时间和时间来做那个递归循环,但我做不到。

【问题讨论】:

  • 我不确定您所说的循环是什么意思,但您所说的“所有路径”通常称为“排列”。尝试使用该关键字搜索,SO 上有大量相关问题。

标签: arrays algorithm loops recursion nodes


【解决方案1】:

使用DFS访问图中的节点如下:

DFS(i,path) {

  visited[i] = true
  neighbours = cal_neighbours(i)
  has_valid_neighbour = false
  for n in neighbours {
     if(!visited[n]) {
         DFS(n,path+"->"+n)
         has_valid_neighbour = true
     }
  }
  if(!has_valid_neighbour) {
     print(path)      
  }
  visited[i] = false
}

调用:DFS(0,"0");

【讨论】:

    【解决方案2】:

    您可以使用一些蛮力算法找到所有路径。但是蛮力算法很慢并且需要很多时间。您可以使用动态编程代替蛮力,这可以提高速度并缩短时间。旅行推销员与您的问题不同,但它为您提供了主要思路。

    【讨论】:

      猜你喜欢
      • 2014-03-30
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 2011-09-09
      相关资源
      最近更新 更多