そのため、深さ優先検索を使用して解決したい問題があり、DFS が見つけた最初のパスを返します。これが私の(不完全な)DFS関数です:
start = problem.getStartState()
stack = Stack()
visited = []
stack.push(start)
if problem.isGoalState(problem.getStartState):
return something
while stack:
parent = stack.pop()
if parent in visited: continue
if problem.isGoalState(parent):
return something
visited.append(parent)
children = problem.getSuccessors(parent)
for child in children:
stack.push(child[0])
startState 変数と goalState 変数は、単純に x、y 座標のタプルです。問題は、さまざまなメソッドを持つクラスです。ここで重要なのは getSuccessors (これは、3 つの項目タプルのリストの形式で特定の状態の子を返します。ただし、問題のこの部分では、タプルの最初の要素 (child[0]) のみです)。子の状態を x、y 座標で返します。これが重要です) および isGoalState (ゴール状態の x、y 座標を提供します)。
したがって、この関数は、他のすべてが適切に実装されていれば、目標状態に達すると戻ると思います (この時点でテストするのは難しい)。何か不足している場合はお知らせください。ただし、私の最大の問題は、何を返すかです。目的の状態に到達するまでに必要なすべての状態のリストを、最初から最後まで順番に出力したいと考えています。スタックには多くの未訪問の子が含まれるため、単にスタックを返すだけではうまくいかないようです。また、行き止まりに達し、後戻りしなければならない可能性があるため、行き止まりのタプルが訪問済みリストに残っている可能性があるため、訪問済みリストは有用なものを何も生成しません。希望するリストを取得するにはどうすればよいですか?