方向グラフでループを識別しています。私の関数は、見つかったループ内のノードを格納するリストのリストを返します。
たとえば、ノードが次のように接続されているグラフでは、次のようになります。
(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つの同一のループがありますが、これらは同一のリストではありません。そのような重複を特定し、1つを除いてすべて削除したいと思います(どちらでも構いません)。
次のように、複数のループが重複している場合があることに注意してください。
[[2,3,5][3,5,2][7,8,9,6]]
itertoolsを調べてみました:
loops.sort()
list(loops for loops,_ in itertools.groupby(loops))
しかし、それは助けにはならず、とにかくこれが適切であるかどうかは100%確信していません。何か案は?私はPython2.4を使用しています。助けてくれてありがとう。