2017-11-16 20 views
0

私は迷路を解決するために必要な動きに注目するためにDFSアルゴリズムを使用しました。 startVertexendVertexがあります。次のように私のコードは次のとおりです。私の迷路解決アルゴリズムには何が問題なのですか?

private void DFS(int vertex, boolean visited[], LinkedList<Move> output) { 

    visited[vertex] = true; 

    for (int neighbor: g.neighbors(vertex)) { 
     if (visited[neighbor] != true) { 
      if (neighbor == vertex + 1) 
       output.add(Move.RIGHT); 
      else if (neighbor == vertex - 1) 
       output.add(Move.LEFT); 
      else if (neighbor == vertex + Math.sqrt(g.size())) 
       output.add(Move.DOWN); 
      else 
       output.add(Move.UP); 
      if (neighbor == endVertex) 
       break; 
      DFS(neighbor, visited, output); 
     } 
     else { 
      output.removeLast(); 
     } 
    } 
} 

すべての周囲の隣人が特定の頂点が役に立たないままであることをこのように探検してきたとき、私はremoveLast()機能を使用しています。しかし、私はエラーがそこにしかないと思う。

グラフgのサイズは、n*nです。元の迷路は、n行n列の2D正方行列であるためです。

DFSを残して(とendVertexが発見されていない)とき、あなたが訪問したクリアする必要が
+0

'g.neighbors(頂点)で停止することができます知っているので、あなたはおそらく、DFSがendVertexが見つかったかどうかを返すようにしたい、' - 'G'が定義されていません。コード内では、推測作業が必要です。もっと効率的で効果的なヘルプを投稿するには[mcve] – c0der

答えて

0
  • output.removeLastは

  • ブレークのみ最も内側の葉output.addする対称的でなければなりませんループ。それはあなたが欲しいものですか?

  • あなたが検索がより高い層

関連する問題