在python中存储深度优先搜索的路径
我试图为一个矩形网格写一个DFS,在这里,我从某个(x,y)坐标开始,必须到达目标坐标(xg,yg)。我需要我的函数来返回一个路径,它实际上是我所选择的方向的列表,比如在python中存储深度优先搜索的路径,python,data-structures,Python,Data Structures,我试图为一个矩形网格写一个DFS,在这里,我从某个(x,y)坐标开始,必须到达目标坐标(xg,yg)。我需要我的函数来返回一个路径,它实际上是我所选择的方向的列表,比如 到目前为止,我的代码是这样的 我是python新手,如果有人能在这里帮助我,我将不胜感激。我的缩进有问题。此外,我也不太清楚DFS存储路径的逻辑。请帮忙 这里有一篇文章解释了。您要做的是如下操作,您有开始节点,在您的情况下(x,y),然后检查您访问的步骤是否已达到目标,即(xg,yg)深度优先搜索的方式是,它维护一个堆栈
到目前为止,我的代码是这样的
我是python新手,如果有人能在这里帮助我,我将不胜感激。我的缩进有问题。此外,我也不太清楚DFS存储路径的逻辑。请帮忙 这里有一篇文章解释了。您要做的是如下操作,您有
开始
节点,在您的情况下(x,y)
,然后检查您访问的步骤是否已达到目标,即(xg,yg)
深度优先搜索的方式是,它维护一个堆栈,并将每个访问的节点推送到堆栈中,然后将它们弹出并检查其是否为目标。在您的程序中,您必须将检查步骤写入列表中。我希望教程链接能帮助您入门。请正确缩进您的代码,以便我们能够遵循您的想法。您的所有代码片段是否都应该在depthFirstSearch
中?希望这能清楚地说明问题。对不起,刚才的事!你的问题不太清楚。你的意思是当搜索到达死胡同时,路径需要包括回溯吗?@Gene:是的。。这就是问题所在。这里的问题是,假设我在节点(x,y)上,它有两个孩子(x1,y1)和(x2,y2),这两个孩子都不是目标状态。现在,当我转到(x1,y1)时,从那里我不能直接转到(x2,y2)。我首先需要返回到(x,y),然后再返回到(x2,y2)。尝试将x1,y1视为一个节点,在元组或两个元素列表中。当启用(x,y)时,可到达的状态是(x1,y1)和(x2,y2),因此将它们都推到堆栈中。现在你一次弹出一个,比如说(x1,y1),然后从那里寻找可到达的状态,然后继续“深度优先”。试试我指出的那个链接。不。我不是,已经忙着很多事情了。但让我来看看。:)让我们
action=['Up','Left','Left','Bottom']
def depthFirstSearch():
visited=[] # stores the vertices that I have visited
action=[] # this is what I have to return
stack=Stack() # the general stack used in DFS
forward=Stack() # stores the forward direction
reverse=Stack() # stores the backward direction, in case we need to backtrack
stack.push(getStartState())
while not stack.isEmpty():
tmp=stack.pop()
if(GoalState(tmp)):
return action
if not tmp in visited:
visited.append(tmp)
if not forward.isEmpty():
dirn=forward.pop()
action.append(dirn)
reverse.append(opposite(dirn))
child1=getSuccessors(tmp) # returns all the possible childs and direction as a list
child2=[]
for st in child1:
if not st in visited:
child2.append(st)
if child2:
for state in child2:
stack.push(state[0])
forward.push(state[1])
reverse.push(oppposite(state[1])
elif not child2:
action.append(reverse.pop())