我面临着一个似乎无法解决的问题,
我有一个节点的数字图,这些节点的形状,如图所示。
该图包含15个节点图中还有两个环。我需要找到一个解决方案,在这个解决方案上我可以找到在这个图中形成一个环的元素,所以从这个图中我可以得到2个元素列表{a,z,b,o,f},{t,h,r,m,p,f},每个节点将被视为一个环元素,而忽略环{q,n,c,v}中不包含的其余元素。请记住,对于我的目的,图表将始终包含多个环。
我得到的是一个节点对象列表,每个节点都有一个名为connected nodes的属性,它是一个包含连接到它的未排序节点或任何内容的列表。连接器节点{f,p}连接到3个节点。它们在某种程度上是共享的,它们连接到环节点和非环节点,而其余节点则严格连接到2个节点。
有人能给我一些建议,或者提出一些可能适用于这个问题的建议吗。
更新:-这是一个有效的aso,其中可以有多个环元素作为连接器节点{v,p,d}。对于更新后的图,我现在有4个环,而不是2个和4个连接器节点。
最佳答案
我不清楚你到底想做什么。据我所知,你想要一个:
您想要找到任何特定的环(例如:{a,z,b,o,f})。
您可以使用DFS来完成它-只需从任何顶点v开始,直到到达顶点u,它已经被访问这个环是用你离开U后访问过的顶点创建的。
您希望找到图中的每个环(在第一个测试用例中为{A,Z,B,O,F},{T,H,R,M,P,F})
这也可以使用DFS来完成-从任何顶点v开始,寻找从v开始的每个单顶点路径(每个顶点最多出现一次的路径)。每当有从路径末端到路径内任何顶点的边(u,w)时,就有环。
这个算法会找到每一个环两次,但这只是技术问题。
该算法的悲观时间复杂度为O(n!)但是请注意,在一般情况下我们找不到更好的解,因为在一般情况下环的数目是n!(例如在完整的图表中)。
你想在图中找到每个顶点,它们是某个环的一部分(在第一个测试用例中{a,z,b,o,f,t,h,r,m,p})
你可以先在图中寻找每一座桥。
https://en.wikipedia.org/wiki/Bridge_(graph_theory)
顶点u不是任何环的一部分,当且仅当来自u的每条边都是桥。
你可以在线性时间内完成。