この問題は、グラフ内のアーティキュレーションノードを見つけることと非常によく似ています。アーティキュレーションポイント、またはバイコネクテッドコンポーネントの技術的定義は、その除去によってグラフが2つに分割されるノードです。
グラフから、関節のノードの発見は、大部分が解決される問題であり、あなたはここでそれについての詳細を見つけることができます:http://en.wikipedia.org/wiki/Biconnected_component
方法は、あなたが一般的にこのような問題にアプローチしたいと私には思えますこれらの線に沿って何か:上記の例で
1. Find all articulation points
2. Do a bfs from each node and determine articulation points along the path
3. Split graph at the articulation point, choosing the side with minimal edges
4. Continue until the two nodes are not connected
、7は、枢着点と7と0-4との間の唯一の二つのエッジが存在するので、あなたは7,2及び3の間にエッジをスニップなりますグラフと7と5,6,8グラフの間の3つのエッジ。
n^2の時間ではあるが問題を解決できるKargerのアルゴリズムと呼ばれるこれを実行するためのより確立されたアルゴリズムがあります(読んでいないことを読んでください)。
このアルゴリズムは、2つのノードだけが存在するまで隣接するノードを効果的に結合し、次に2つのノード間に残っているエッジの数を数えることによって機能します。エッジの数は、グラフを分割するために必要な最小カット数です。
あなたの問題でKargerのアルゴリズムを実装する方法は、分割したい2つのノードに常にノードを参加させる必要があるという警告が必要です。さらに、元のエッジに戻ることができるようにするには、カットする必要があります。エッジが最初に属していたノードを参照する必要があります。
ここカーガーのアルゴリズムの偉大な可視化があります:http://en.wikipedia.org/wiki/Karger%27s_algorithm
これは「最小カット」問題と呼ばれます。それは最短経路よりも最大流量に密接に関連している。 –