如何遍历所有路径中的所有节点?

时间:2015-02-18 06:25:09

标签: arrays algorithm loops recursion nodes

我有一个有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种不同的结果,然后我将比较这些结果并找到最佳结果。我浪费了我的时间和时间去做那个递归循环,但我无法做到。

2 个答案:

答案 0 :(得分:0)

您可以使用一些强力算法找到所有路径。但是暴力算法很慢并且需要花费很多时间。您可以使用动态编程来提高速度和减少时间,而不是暴力。旅行推销员与你的问题不同,但它给你的主要想法。

答案 1 :(得分:0)

使用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”);