如何解决访问有向循环图中每个节点的算法
正如标题所说,我有一个包含循环并有向的图。它的连接紧密,因此没有被“卡住”的危险。给定一个起始节点,我想找到一条访问每个节点的路径(最好是最短的路径,但这并不是我正在优化的路径)。
值得一提的是,该图中的许多节点经常以双向方式连接-即几乎是无向的。我想知道是否有修改后的DFS可以在此特定用例下很好地工作?
如果没有,我应该看一下Held-Karp算法吗?一次访问并返回起点限制不适用于我。
解决方法
最简单的方法可能是任意选择一个根,然后在G上计算BFS树(即,从根到另一个顶点的路径),然后在G的转置上计算BFS树(即,从每个顶点到另一个路径)到根)。然后,对于每个其他顶点,您可以通过交替的树路径导航到根和从根导航。此方法有多种快速优化方法。
另一种可能性是在搜索空间上使用A *,该状态由状态当前节点×访问节点集构成,启发式等于尚未访问的节点数。最坏情况下的运行时间与Held–Karp相当(在运行Floyd–Warshall以形成完整的不对称距离矩阵之后,也可以应用该时间)。
,除非图形完整,否则您将找不到访问每个顶点的路径。但是,您可以找到访问每个顶点的步行。 步行与路径不同,路径仅访问顶点一次。 步行
不是这种情况如果图是完整的,则可以通过BFS或DFS轻松找到这样的路径,并小心,当您选择当前正在探索的顶点的邻居时,请选择成本最低的一个(或边缘)。
如果图形断开连接,则不存在这样的路径或步行。
如果已连接图形,则可以通过 Kruskals的或 Prims的算法或 BFS 查找步行 strong>因为这两种算法本质上都将BFS用作子例程,所以也可以使用 DFS 。
的想法是找到最小的生成树。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。