単純な無向グラフを与えたとしましょう 有するノードと双方向のエッジを。与えられたとについて、グラフの間に単純なパスが1つしかないかどうかを確認します。
私が考えていたのは、グラフ内のすべてのサイクルを見つけて、から bfsを実行する必要があるということです。パスがあるサイクルの頂点を通過しない場合、パスは1つだけで、それ以外の場合はそこにあります。以上です。
これを確認する他の方法はありますか?
単純な無向グラフを与えたとしましょう 有するノードと双方向のエッジを。与えられたとについて、グラフの間に単純なパスが1つしかないかどうかを確認します。
私が考えていたのは、グラフ内のすべてのサイクルを見つけて、から bfsを実行する必要があるということです。パスがあるサイクルの頂点を通過しない場合、パスは1つだけで、それ以外の場合はそこにあります。以上です。
これを確認する他の方法はありますか?
回答:
2最短経路を使用するというラファエルの提案は正しいですが、必要以上に複雑です。
あなたのアプローチは実行不可能であり、サイクル数は入力のサイズの要因です。
ここに時間内のソリューションのスケッチがあります 。
パスを見つける から に に 。そのようなパスが存在しない場合は、答えてください。それ以外の場合は、パス内のすべてのノードをマークします。そのパス内のどのノードもその後のノードに到達しない場合に限り、そのパスは実際に一意です。パスの最初のノードから開始、出て行くランダムなエッジを選びます それを接続するもの以外 そこからDFSを起動します。マークされたノードに到達したら、答えます、マークされたノードに到達しない場合は、グラフからその分岐を切り取り、別のランダムな出力エッジを選択します。すべての出力エッジがなくなるまで同様の方法で続行し、到達するまで次のノードから再度開始します。答えずに手順を終えた場合、答える 。手順全体にDFSのコストがかかります。、したがって、全体の時間は 。
ソースからのパスが存在する場合 一部のサイクルでは、単一の単純なパスの存在と常に矛盾するわけではありません。次の例を見てください。
ここから到達できるサイクルがあります そして 。この問題は。
BFSを実行して、最短距離を見つけることができます グラフ上のすべての頂点に、同じから 。1つのノードは最短パスに属しています に もしそうなら