私はNxNセルのグリッドを持っています(Array [N] [N]のように定義された2次元配列を考えてください)。N行N行グリッド内のすべてのパスを計算するためのアルゴリズムです。
- なしセルが単一パス以内に2回含まれない:
どのアルゴリズム各セルに各セルからすべてのパス [I] [J] [K] [L]を計算します。
- 隣接対角線、水平および垂直方向の動きがすべて合法です。
- アルゴリズムは平均で最速です。
- 最小限のメモリが使用されます。
私はNxNセルのグリッドを持っています(Array [N] [N]のように定義された2次元配列を考えてください)。N行N行グリッド内のすべてのパスを計算するためのアルゴリズムです。
どのアルゴリズム各セルに各セルからすべてのパス [I] [J] [K] [L]を計算します。
私はあなたが実際のパスを望むと仮定します。
あなたは同じパスで検討頂点に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,{})
を呼び出します。
幅優先探索は、あなたが望むものとまったく同じです。すべてのパスを生成するときに最も高速ではありません
幅優先検索*すべての*パスはどのようになりますか?これは通常、* visited *セット内にあるノードに到達すると、1つのパスを終了します。 – aioobe
http://stackoverflow.com/questions/713508/find-the-paths-between-two-given-nodes/713579#713579 – t3hn00b
申し訳ありませんが、変更のない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
良い質問です。動的プログラミングの問題のようです。 – aioobe
誰かが事前に計算されたハードコードされた答えでアルゴリズムで答える前に、 '5 by 5'を' N by N'に変更します。 – aioobe
Djkistraの最短経路アルゴリズムは私が想像しているように、ここで詳細を見てみましょう。 http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm –