私は人工知能プロジェクトのpythonプログラムに取り組んでいます。深さ優先検索についてです。私はうまくいく1つのPythonコードを持っています:
def depthFirst(problem,start,path,result,vis):
next=problem.getSuccessors(start)
if problem.isGoalState(start):
result.append(path)
print path
for I in next:
if I[0] not in vis:
vis.append(I[0])
depthFirst(problem,I[0],path+[I[1]],result,vis)
vis.pop()
def depthFirstSearch(problem):
start=problem.getStartState()
result=[]
depthFirst(problem,start,[],result,[])
return result[-1]
数値の場合、python はその参照を返すことができませんが、リストの場合は値ではなく参照を渡します。
同様のプログラムを作成しました。path
ここでは、代わりに変数を使用しますresult
:
def depthFirst(problem,start,path,vis):
if problem.isGoalState(start[0]):
print 'Start1',start[1]
print 'Path',path
l=start[1]
path.append(l)
path=path[0]
print 'FindPath',path
return
#vis.add(start[0])
fringe=problem.getSuccessors(start[0])
for child in fringe:
'''if problem.isGoalState(child):
path.apend(child[1])
break
return'''
print child
if child[0] not in vis:
tmppath=start[1][:]
tmppath.append(child[1])
vis.add(child[0])
print 'vis=',vis
print path
depthFirst(problem,(child[0],tmppath),path,vis)
print 'path=',path
def depthFirstSearch(problem):
start=problem.getStartState()
path=[]
vis=set([])
depthFirst(problem,[start,[]],path,vis)
print path[0]
return path[0]
しかし、それは最初のものとは非常に異なる道をたどります。2つのプログラムは同じだと思いますが、に変更しようとしていただけresult
ですpath
。どうして差がつく。