我想在无向图中找到固定长度的路径(运行程序时给出)。我正在使用我的图的邻接矩阵。
我尝试使用一些算法,如 DFS 或 A*,但它们只返回最短路径。
节点无法再次访问。
假设我的图有 9 个节点,最短路径是由 4 个节点构建的。
我想要有额外的变量来“告诉”算法我想要找到有 7 个节点的路径(例如),并且它将返回包含在我的预期路径 {1,2,4,5,6, 7,8}。
当然,如果没有我想要的路径的解决方案,它将不会返回任何内容(或者它将返回接近我的期望的路径,假设是 19 而不是 20)。
有人告诉我关于回溯的DFS,但我对此一无所知。
有人可以解释如何使用带有回溯的 DFS 或推荐一些其他算法来解决该问题吗?
回溯确实似乎是一个合理的解决方案。这个想法是递归地找到所需长度的路径。
伪代码:
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
上述算法将生成all所需深度的路径。
调用与DFS(depth,source,[])
(where []
是一个空列表)。
Note:
- 该算法将生成可能并不简单的路径。如果您只需要简单的路径 - 您还需要维护
visited
设置,并在将其附加到找到的路径时添加每个顶点,并在从路径中删除它时删除它。
- 如果您只想找到一个这样的路径 - 您应该从函数返回值(如果找到这样的路径则返回 true),并在返回值为 true 时中断循环(并返回 true)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)