2009-07-27 13 views
3

リスト内の指向性ノードの接続性をチェックする必要があります。 基本的に2〜7つの回答を持つ質問です。選択された答えが次の質問を指示します。 これらのペアは手動でキャプチャされるため、ループバック(許可されない)とデッドエンド(すべてのルートがENDノードで停止する必要があります)の可能な各パスを確認する必要があります すべてのポインタ?グラフ問題のアルゴリズム

start --> n1 --- n2 --- n3 --- n4 --- end 

      \/ \  \ / /

      n5  \  n6------ n7 

       \  \ / /

       n8----n9---n10----n11 

      DIRECTION --> 
+1

私はグラフで少し混乱しています。 n8には1つの答えしかありませんか? n9はどう? –

+0

いいえ、n1〜n11の質問のうち2つ以下の回答はありません。このグラフは、異なる回答で可能な異なる経路の実例です。 例:n1には4つの回答があり、そのうち3つはn2を指し、残りはn5を指しています。 質問の回答は次々と異なる質問をする可能性がありますが、グラフのイラストを単純にしてみました。 – callisto

+0

ああ待って、n6は3つの異なるパスで表示されます。 n9はn7を指しているだけで、n10を指すすべての答えがあります。 – callisto

答えて

4

これは、あなたが探しているものかもしれ:

Testing whether a graph is acyclic

エンド・ノードは、リーフノードは、そのページの用語であるものです。

  1. グラフにノードがない場合は、非循環です。
  2. グラフにリーフがない場合、それは循環します。
  3. は、任意の葉を選択してデッドエンドを存在しないことを確認するには、葉とそれへのすべての遷移、後藤ステップ1

を削除します。単純に上記のアルゴリズムを使用する前に、単一のリーフノードがあることを確認してください。

3

すでに訪問したノードのすべてのトラックを保つこと、breadth first searchアルゴリズムを使用してください。次のノードを探索するときに既に訪れたノードの1つが可能性がある場合、グラフは間違っています。さらに、次のノードに到達する可能性のあるノードがなく、まだ到達していないノードに到達すると、グラフも正しく接続されません。