Arrays 如何循环所有路径中的所有节点?
我有一个数组,它有4个成员,我需要尝试所有循环组合,如Arrays 如何循环所有路径中的所有节点?,arrays,algorithm,loops,recursion,nodes,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个不同的结果,然后我会比较这些结果,并找到最好的一个。我浪费了很多时间去做那个递归循环,但我做不到 您可以使用一些蛮力算
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个不同的结果,然后我会比较这些结果,并找到最好的一个。我浪费了很多时间去做那个递归循环,但我做不到 您可以使用一些蛮力算法找到所有路径。但是蛮力算法速度慢,需要花费很多时间。您可以使用动态编程来代替暴力,动态编程可以提高速度和次数。旅行推销员与您的问题不同,但它给出了主要的想法。使用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”)我不确定你所说的循环是什么意思,但你所说的“所有路径”通常被称为“排列”。尝试用那个关键词搜索,有很多相关的问题。