我在编写一个返回在无向图上形成简单循环的所有路径的算法时遇到了一些麻烦。
我首先考虑的是从顶点 A 开始的所有循环,对于下图
A,B,E,G,F
A,B,E,D,F
A,B,C,D,F
A,B,C,D,E,G,F
额外的周期将是
B,C,D,E
F,D,E,G
但是这些可以找到,例如,通过再次调用相同的算法,但分别从 B 和 D 开始。
图表如下所示——
我目前的方法是通过访问 A 的所有邻居,然后访问邻居的邻居等等来构建从 A 开始的所有可能路径,同时遵循以下规则:
每次存在多个邻居时,都会找到一个分叉,并创建和探索一条来自 A 的新路径。
如果任何创建的路径访问原始顶点,则该路径是一个循环。
如果任何创建的路径两次访问同一顶点(与 A 不同),则该路径将被丢弃。
继续,直到探索了所有可能的路径。
我目前在试图避免多次发现同一个循环时遇到问题,我试图通过查看新邻居是否已经是另一条现有路径的一部分来解决这个问题,以便两条路径组合(如果独立)建立一个循环。
我的问题是:我是否遵循正确/更好/更简单的逻辑来解决这个问题。?
我会很感激你的意见