無向グラフ上で単純なサイクルを形成するすべてのパスを返すアルゴリズムを作成するのに問題があります。
最初に、頂点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からの新しいパスが作成されて探索されます。
作成されたパスのいずれかが元の頂点にアクセスする場合、そのパスはサイクルです。
作成されたパスのいずれかが同じ頂点に2回アクセスした場合(Aとは異なる)、パスは破棄されます。
考えられるすべてのパスが探索されるまで続けます。
私は現在、同じサイクルが複数回検出されるのを回避しようとして問題を抱えています。新しいネイバーがすでに別の既存のパスの一部であるかどうかを調べて、2つのパスを組み合わせて(独立している場合)、サイクル。
私の質問は次のとおりです。私はこの問題を解決するために正しい/より良い/より単純なロジックに従っていますか?
コメントありがとうございます