我正在识别方向图中的循环。我的函数返回一个列表列表,这些列表将节点存储在找到的任何循环中。
例如,在节点连接如下的图中:
(1,2)(2,3)(3,4)(3,5)(5,2)
在 2 - 3 - 5 处发现了一个循环,因此该函数将返回:
[[2,3,5]]
在某些情况下,有多个循环会返回如下内容:
[[2,3,4][6,7,8,9]]
这很好,但是如果图中有多个起点在不同点加入同一个循环,例如在图中:
(1,2)(2,3)(3,4)(3,5)(5,2)(6,3)
两个节点 1 和 6 在不同的点加入同一个循环,这将返回:
[[2,3,5][3,5,2]]
所以这里有两个相同的循环,它们不是相同的列表。我想识别这种重复并删除除一个之外的所有重复(哪个都没有关系)。
请注意,可能存在多个循环的情况,其中一个是重复的,例如:
[[2,3,5][3,5,2][7,8,9,6]]
我试过调查 itertools:
loops.sort()
list(loops for loops,_ in itertools.groupby(loops))
但这无济于事,而且我也不能 100% 确定这是否合适。有任何想法吗?我在 python 2.4 上。谢谢你的帮助。