2

各エッジまたは各頂点を 1 回だけ交差する必要があるという制限はありません。

そのようなパスの存在に必要かつ十分なグラフのプロパティ (オイラーパスの存在のためのノードの次数など)、または存在するか存在しないかを証明する既知のアルゴリズム (おそらく開始エッジからすべてのエッジを通る最小パスを見つける)?

いくつかの可能性を検討しましたが、最も強力なものは、強く接続されたコンポーネントを単一のスーパーノードに折りたたむことであり、結果のグラフがすべてのエッジをカバーする単純な「リンクされたリスト」のようなグラフであるかどうかを確認します (これは単純で、開始ノードから歩いているだけです/スーパーノードは常に現在のノードから単一のエッジを話し、発信エッジ (スーパーノードの場合はすべての内部エッジ) を訪問済みとしてカウントし、リーフ ノードに到達すると、すべてのエッジがカウントされたかどうかを確認します)。このソリューションでは、元のエッジが冗長になったとしてもすべての元のエッジを保存することが重要です (たとえば、接続されたコンポーネント A、B、C をスーパーノード S に折りたたんだ後、F から A、F から B、F から C へのエッジがなければならない場合)。簡略化されたグラフで同じスーパーノード S を指していても、すべて保存されます)。表現が不適切でしたら申し訳ありませんが、

もっと簡単な方法はありますか?または、サイクル/接続されたコンポーネントを処理するためのより良いアルゴリズムですか? グラフが非巡回の場合、解くのは非常に簡単に見えるからです。

4

1 に答える 1

2

グラフが強く接続されている場合は、他のすべてのノードからすべてのノードにアクセスできます。このパスではエッジを再利用できるため、すべてのエッジを使用できる必要があります。いくつかのエッジを取る、eeはノードvにつながり、そこから他のすべての頂点に到達できるため、他のすべてのエッジに到達できます。それらから、 vに戻ることができます。必要に応じて繰り返します。

したがって、質問に答えるために、そのようなパスの存在を保証するグラフのいくつかのプロパティがあります...グラフが強く接続されている場合、私はそう言うでしょう。(ただし、このようなパスには必要ありません。たとえば、分岐のない単一の一方向パスの場合)。しかし、それは(私が考えることができる)単一のエッジケースのようです。

強い接続性のテストは、力ずくの、すべてをチェックする方法で簡単に行うことができます。これにも最大フロー、最小カットアルゴリズムを適応させることができると私は信じています。

于 2013-03-20T04:05:22.670 に答える