访问有向循环图中每个节点的算法
Algorithm to visit every node in a directed cyclic graph
正如标题所说,我有一个包含循环且有向的图形。它紧密相连,因此没有“卡住”的危险。给定一个起始节点,我想找到访问每个节点的路径(理想情况下是最短的,但这不是我要优化的)。
值得一提的是,此图中的许多节点经常双向连接 - 即 几乎 无向。我想知道是否有修改后的 DFS 可能适用于这个特定的用例?
如果不是,我应该看看 Held-Karp 算法吗?一次访问和return起点限制不适用于我
最简单的方法可能是任意选择一个根并计算 G 上的 BFS 树(即从根到每个其他顶点的路径)和 G 的转置上的 BFS 树(即从每个顶点的路径)根的其他顶点)。然后对于每个其他顶点,您可以通过交替树路径导航到根和从根导航。此方法有各种快速优化。
另一种可能性是在搜索 space 中使用 A*,该搜索由状态当前节点 × 已访问节点集组成,启发式等于尚未访问的节点数。 worst-case 运行 时间相当于Held–Karp(也可以在运行 Floyd–Warshall 之后应用,形成完全非对称距离矩阵)
正如标题所说,我有一个包含循环且有向的图形。它紧密相连,因此没有“卡住”的危险。给定一个起始节点,我想找到访问每个节点的路径(理想情况下是最短的,但这不是我要优化的)。
值得一提的是,此图中的许多节点经常双向连接 - 即 几乎 无向。我想知道是否有修改后的 DFS 可能适用于这个特定的用例?
如果不是,我应该看看 Held-Karp 算法吗?一次访问和return起点限制不适用于我
最简单的方法可能是任意选择一个根并计算 G 上的 BFS 树(即从根到每个其他顶点的路径)和 G 的转置上的 BFS 树(即从每个顶点的路径)根的其他顶点)。然后对于每个其他顶点,您可以通过交替树路径导航到根和从根导航。此方法有各种快速优化。
另一种可能性是在搜索 space 中使用 A*,该搜索由状态当前节点 × 已访问节点集组成,启发式等于尚未访问的节点数。 worst-case 运行 时间相当于Held–Karp(也可以在运行 Floyd–Warshall 之后应用,形成完全非对称距离矩阵)