回溯确实似乎是一个合理的解决方案。这个想法是递归地找到所需长度的路径。
伪代码:
DFS(depth,v,path):
if (depth == 0 && v is target): //stop clause for successful branch
print path
return
if (depth == 0): //stop clause for non successful branch
return
for each vertex u such that (v,u) is an edge:
path.append(v) //add the current vertex to the path
DFS(depth-1,u,path) //recursively check all paths for of shorter depth
path.removeLast() // clean up environment
上述算法将生成所需深度的所有路径。
调用DFS(depth,source,[])
(其中[]
是一个空列表)。
笔记:
- 该算法将生成可能并不简单的路径。如果您只需要简单的路径 - 您还需要维护
visited
集合,并在将每个顶点附加到找到的路径时添加它,并在将其从路径中删除时将其删除。
- 如果您只想找到一个这样的路径 - 您应该从函数返回值(如果找到这样的路径,则返回 true),并在返回值为 true 时打破循环(并返回 true)。