访问有向循环图中每个节点的算法

问题描述

正如标题所说,我有一个包含循环并有向的图。它的连接紧密,因此没有被“卡住”的危险。给定一个起始节点,我想找到一条访问每个节点的路径(最好是最短的路径,但这并不是我正在优化的路径)。

值得一提的是,该图中的许多节点经常以双向方式连接-即几乎是无向的。我想知道是否有修改后的DFS可以在此特定用例下很好地工作?

如果没有,我应该看一下Held-Karp算法吗?一次访问并返回起点限制不适用于我。

解决方法

最简单的方法可能是任意选择一个根,然后在G上计算BFS树(即,从根到另一个顶点的路径),然后在G的转置上计算BFS树(即,从每个顶点到另一个路径)到根)。然后,对于每个其他顶点,您可以通过交替的树路径导航到根和从根导航。此方法有多种快速优化方法。

另一种可能性是在搜索空间上使用A *,该状态由状态当前节点×访问节点集构成,启发式等于尚未访问的节点数。最坏情况下的运行时间与Held–Karp相当(在运行Floyd–Warshall以形成完整的不对称距离矩阵之后,也可以应用该时间)。

,

除非图形完整,否则您将找不到访问每个顶点的路径。但是,您可以找到访问每个顶点的步行步行路径不同,路径仅访问顶点一次。 步行

不是这种情况

如果图是完整的,则可以通过BFS或DFS轻松找到这样的路径,并小心,当您选择当前正在探索的顶点的邻居时,请选择成本最低的一个(或边缘)。

如果图形断开连接,则不存在这样的路径步行

如果已连接图形,则可以通过 Kruskals的 Prims的算法或 BFS 查找步行 strong>因为这两种算法本质上都将BFS用作子例程,所以也可以使用 DFS
的想法是找到最小的生成树。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...