2017-04-24 7 views
1

質問が行くであるかどうかを確認します。我々は、我々はの隣人を探索する開始頂点と 順に応じて、グラフのために多くの可能性のあるDFSツリーが存在する可能性があることを知っている木のようにDFSツリー

各頂点。
与えられた与えられたグラフG =(V、E)では、この木の各辺がEにある となるようにルート木Tが与えられます。TがGのDFSツリーであるかどうかを決定する効率的なアルゴリズムを設計します。

「ツリーTはDFSツリーではありません」という意味は何ですか(グラフ全体にまたがっているとします)。

私が隣接リスト表現(私が本質的な主張をしているものと推測しています)にツリー頂点の順序がない場合、私はどんな方法でもトラバースし、質問に与えられたツリーを作成できます。

EDIT:「DFS以外のツリーT」について知りたかったと思います。すべての子が必要であるという制約があるため、すべてのDFSで作成されるツリーです親に戻る前にDFSツリーで最初に訪問しました。それでも、誰でも効率的なAlgoを手助けすることができます。

例えば:

A - B
           /           
\ C - D

このグラフは、ツリーTを有するもの:
A - B
           /           
\ C   D

が、これは有効なDFSツリーをイマイチ!
DFSは頂点Aから始まります。

ありがとうございます!

+0

Tは深さ優先検索ツリー(DFS)です。 – Billa

+0

この質問の関連性を教えてください。「ツリーTはDFSツリーではありません」とはどういう意味ですか? TはGのDFSツリーだと言っています – Billa

+0

どのツリーがないのか分かりましたら、どのツリーか分かります。 – Akash

答えて

1

DFSが結果のラベリングを一意に決定しないという事実は、ノードの子が訪問される順序がないという事実による。私の理解のために、与えられたグラフGのツリーTがDFSツリーであるかどうかをチェックすることは、以下のように行うことができる。

Tに最小ラベルを持つノードを見つけます。これは現在のノードvであり、この時点でDFS検索が開始されるルートです。訪問先としてvをマークしてください。

vの未訪問の子プロセスをGに再帰的に処理します。これらがTと同じでない場合、TGというDFSツリーではありません。同じ場合は、TのDFS番号の昇順に処理し、通常どおりDFS番号を割り当て、訪問先ノードをマークします。割り当てられたDFS番号がTのDFS番号と一致しない場合は、ツリーTはDFSツリーGになることはできません。一方、すべてのDFS番号をTのものと一致するように割り当てることができる場合、TGのDFSツリーであることを建設的に証明しています。

+0

これは1つの特定のケースでは失敗します。 A:B; B:C、D; C:D; D:C; 私がAで始まり、チェックツリーのDFS番号がA(1)、B(2)、C(3)、D(4)である場合。与えられたTツリーとDFSツリーは区別できません。 B:C、D; C:B; D:B; はDFSツリーではありません。 – Akash

+0

^はTとDFSツリーのDFS番号が同じですが、DはDFSツリーではないと思います。 – Akash

+0

@Akashグラフとツリーをより正確に記述してください。あなたの表記「A:B」では、「A」には「B」という子があることを意味しますか?あなたのコメントの最後に言及したグラフは、サイクルを含んでいるのでツリーではありません。 – Codor

関連する問題