困惑如何在有死胡同的无向图中找到循环
Confused how to find cycles in undirected graph with dead ends
我一直在考虑如何在我的图表数据中找到一个循环,但我有点迷失了我如何跟踪我在图表上行进的位置以及当我发现死胡同时如何回溯。
这是一个视觉示例:
我可以沿着路径轻松找到这里的循环,直到我回到 0 - 问题出在节点 3,我必须检查节点 4 和 5。
很明显 4->5 将是一个死胡同并且不会成为循环的一部分,但是您如何编写代码返回到节点 3 以继续到 6?
作为深度优先搜索的一部分,您可以将节点存储在“已访问”集中
当您转到新节点时,请在检查 visited.Contains()
后添加到集合中。如果为真,你有一个循环(不止一次回到同一个节点)
因此,从逻辑上讲,假设您从 3 开始(或到达 3),并且边是随机选取的,因为它们不是定向的
(program-start) visited = {}
at = 3, visited={3}
at = 4, visited={3, 4}
at = 5, visited={3, 4, 5}
在这里,你要从5中挑出唯一的边来遍历,送你回到4,检查你的集合,它已经存在了...
我一直在考虑如何在我的图表数据中找到一个循环,但我有点迷失了我如何跟踪我在图表上行进的位置以及当我发现死胡同时如何回溯。
这是一个视觉示例:
我可以沿着路径轻松找到这里的循环,直到我回到 0 - 问题出在节点 3,我必须检查节点 4 和 5。
很明显 4->5 将是一个死胡同并且不会成为循环的一部分,但是您如何编写代码返回到节点 3 以继续到 6?
作为深度优先搜索的一部分,您可以将节点存储在“已访问”集中
当您转到新节点时,请在检查 visited.Contains()
后添加到集合中。如果为真,你有一个循环(不止一次回到同一个节点)
因此,从逻辑上讲,假设您从 3 开始(或到达 3),并且边是随机选取的,因为它们不是定向的
(program-start) visited = {}
at = 3, visited={3}
at = 4, visited={3, 4}
at = 5, visited={3, 4, 5}
在这里,你要从5中挑出唯一的边来遍历,送你回到4,检查你的集合,它已经存在了...