【发布时间】:2020-09-11 16:54:50
【问题描述】:
正如标题所说,我有一个包含循环且有向的图。它紧密相连,因此没有“卡住”的危险。给定一个起始节点,我想找到访问每个节点的路径(理想情况下是最短的,但这不是我优化的目标)。
值得一提的是,该图中的许多节点经常以双向方式连接 - 即它几乎是无向的。我想知道是否有修改后的 DFS 可能适用于这个特定的用例?
如果不是,我应该查看 Held-Karp 算法吗?一次访问和返回起点限制不适用于我。
【问题讨论】:
-
正常的 DFS 或 BFS 没有成功吗?
-
@trincot 如果我错了,请纠正我,但循环不会与上述两者混为一谈吗?另外,我认为 BFS 的搜索空间可能会变得巨大。
-
只要将节点标记为已访问(并且不要重新访问它们),两者都没有问题。当然,BFS 的特点是占用空间更大。一种 BFS 风格将整个路径存储在 BFS 队列的每个条目中:如果这是您的想法,请不要这样做。只需在路径(链表)上存储对 previous 节点的引用。
-
但是对于循环/有向边,重新访问节点是必要的,不是吗?在此图上,例如 computersciencewiki.org/index.php/File:Directed_graph.png,唯一的步行将是 A、B、C、D、B、C、F。我看不出算法如何不能保证不会陷入循环。
标签: algorithm graph-theory graph-algorithm shortest-path graph-traversal