如何在DFS中跟踪节点深度而无需递归(使用堆栈)?

时间:2018-09-18 04:44:06

标签: python dfs

这是我的DFS代码段,没有在python中递归的代码:

 def DFS(graph,start,end):
explored=[]
queue=[[start]]

if start == end:
    return "done"
while queue:
    path=queue.pop()
    node=path[-1]
    if node not in explored:
        neighbours=graph[node]

        for neighbour in neighbours:
            new_path=list(path)
            new_path.append(neighbour.name)
            queue.append(new_path)
            if neighbour.name== end:
                return new_path
        explored.append(node)
return "no path"

这是我的节点的样子:     班级优势:     #def init ():

def __init__(self,name,value,depth=0):
    self.name=name
    self.value=value
    self.depth=depth

在不进行递归的情况下实现深度限制搜索时,如何跟踪每个节点的水平?

1 个答案:

答案 0 :(得分:2)

您当前的算法无法计算级别,因为您没有跟踪算法中的足够信息。

正如您所说,进行递归时跟踪级别要容易得多。递归和交互之间的差异不是很大。您将函数调用交换为循环,并对代码进行了一些较小的重组以补偿循环。

即使您有迭代算法,您仍然应该能够确定当前的深度。如果您从递归版本开始,并在保持深度知识的同时朝着迭代解决方案的方向努力,那么我认为您将解决它。

这对我来说就像是上学,所以我不会给您解决方案。希望你能理解。

一个提示可能不仅是保留队列中的路径,还应保留深度(例如,作为元组)。