2012-05-08 8 views
-3

私はNxNセルのグリッドを持っています(Array [N] [N]のように定義された2次元配列を考えてください)。N行N行グリッド内のすべてのパスを計算するためのアルゴリズムです。

  1. なしセルが単一パス以内に2回含まれない:

    どのアルゴリズム各セルに各セルからすべてのパス [I] [J] [K] [L]を計算します。

  2. 隣接対角線、水平および垂直方向の動きがすべて合法です。
  3. アルゴリズムは平均で最速です。
  4. 最小限のメモリが使用されます。
+0

良い質問です。動的プログラミングの問題のようです。 – aioobe

+0

誰かが事前に計算されたハードコードされた答えでアルゴリズムで答える前に、 '5 by 5'を' N by N'に変更します。 – aioobe

+1

Djkistraの最短経路アルゴリズムは私が想像しているように、ここで詳細を見てみましょう。 http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm –

答えて

0

私はあなたが実際のパスを望むと仮定します。

あなたは同じパスで検討頂点にvisitedセットを維持し、すでに同じパスで発見された頂点を模索回避DFSを使用してそれを達成することができます。

擬似コード:

DFS(v,target,visited): 
    if (v == target): 
     print path to v from the initial sorce 
     return 
    visited.add(v) 
    for each vertex u such that u is a neighbor of v: 
     if (u is not in visited): 
      u.parent <- v 
      DFS(u,target,visited) 
    visited.remove(v) 

は[{}が空visited集合である] with DFS(source,target,{})を呼び出します。

1

幅優先探索は、あなたが望むものとまったく同じです。すべてのパスを生成するときに最も高速ではありません

+1

幅優先検索*すべての*パスはどのようになりますか?これは通常、* visited *セット内にあるノードに到達すると、1つのパスを終了します。 – aioobe

+0

http://stackoverflow.com/questions/713508/find-the-paths-between-two-given-nodes/713579#713579 – t3hn00b

+0

申し訳ありませんが、変更のないBFSはすべてのパスを見つけることができません。例:(0,0)と(1,2)の間のパスを見つける:BFSが実行可能なパス '(0,0) - >(1,1) - >(1,2)'を生成すると仮定すると、 BFSは 'visited'を維持しているので'(0,0) - >(1,0) - >(0,1) - >(1,1) - >(1,2) 、1) 'は2番目の経路で再探索されません。 BFSを具体的に変更した場合は、詳細を説明してください。標準のBFSはここで失敗します。 – amit

関連する問題