2012-04-16 1 views
0

グラフの基本的なものは、それぞれが隣接するものを格納するノードのArrayListです。グラフをトラバースしますが、深さはnレベルのみです

public class Node { 
    ArrayList<Node> neighbors; 
    String data; 
    public Node() { 
     data = null; 
     neighbors = new ArrayList<Node>(); 
    } 
} 

このグラフではすべてのパスを出力しますが、nレベルは深くします。これをコーディングするにはどうすればいいですか?

これを別に保存する必要がある場合は、お気軽にお知らせください。しかし、もっと重要なのは、あらゆるレベルのn-levelパスをどのようにプリントアウトするかを知りたいと思っています。

+0

すべてのパスを一貫して印刷できますか?それを行うコードを私たちに教えてください。 – dasblinkenlight

+0

グラフの開始/終了はありますか?正確にn長のパスまたはn長のパスを探していますか? – twain249

+0

@ twain249 start/endで何を意味するのか分かりませんが、長さは最大でnです。 – varatis

答えて

4

グラフのdepth-limited traversalを実行してください。これは、再帰的なステップを除いて、深さ優先検索と同じです。depthという変数を追加します。この変数は、深度を下げるたびに増加します。その後、希望の深度に達すると、再帰を止めるだけです。

1
  1. visitedという余分な変数をすべてのノードに追加します。
  2. Queueを使用して幅優先探索を行い、ループを形成することから防ぐためにvisitedを使用しています。
  3. 長さはnです。
+0

もし私もループを望むなら、私はその2番目のステップを削除できますか?私はループを持っているものを含むすべてのパスが欲しいです。 – varatis

+0

それはうまくいきません。あなたが 'visited'を削除しようとするなら、あなたのコードは決して終わらないかもしれません。だから、もしあなたがループを望むならば、正確にはどういう意味ですか? – noMAD

+0

AがBに隣接していて、AまたはBという名前の他のノードがないとしましょう。A-B-A-B-Aを有効なパスとして出力します。 – varatis

関連する問題