Python 广度优先搜索-为什么我的队列被清空?
我的代码从队列中获取父节点,检查它是否被访问,如果没有,生成它的子节点,将它们推送到队列中,并重复循环,以FIFO方式从队列中获取下一个父节点。不幸的是,我似乎从未达到我的目标状态。我实施BFS的方式在结构上是否有问题?我使用堆栈而不是队列来创建DFS搜索,使用相同的代码获得了所需的输出。将“q”更改为队列(FIFO)数据结构实际上是我对该代码所做的唯一更改。还有什么我要补充的吗?父/子对象存储为元组,因此可以忽略所有这些工作——这似乎不是问题所在。此外,程序在isGoalState求值为True之前中断,因此代码似乎也不会导致问题。isGoalState测试给定状态的坐标是否与BFS需要找到的“目标”匹配。GetConferences返回元组列表,每个元组表示节点的子级Python 广度优先搜索-为什么我的队列被清空?,python,algorithm,artificial-intelligence,Python,Algorithm,Artificial Intelligence,我的代码从队列中获取父节点,检查它是否被访问,如果没有,生成它的子节点,将它们推送到队列中,并重复循环,以FIFO方式从队列中获取下一个父节点。不幸的是,我似乎从未达到我的目标状态。我实施BFS的方式在结构上是否有问题?我使用堆栈而不是队列来创建DFS搜索,使用相同的代码获得了所需的输出。将“q”更改为队列(FIFO)数据结构实际上是我对该代码所做的唯一更改。还有什么我要补充的吗?父/子对象存储为元组,因此可以忽略所有这些工作——这似乎不是问题所在。此外,程序在isGoalState求值为Tru
while q:
parent = q.pop()
print "parent: " + str(parent)
print str(q)
if parent[0] in visited: continue
visited.append(parent[0])
if problem.isGoalState(parent[0]):
pathList.append(parent[0])
while actionMap[parent] is not None:
actionList.append(actionMap[parent])
try:
pathList.append(parentMap[parent])
except KeyError:
break
parent = parentMap.get(parent, None)
actionList.reverse()
children = problem.getSuccessors(parent[0])
if children != []:
for child in children:
q.push(child)
parentMap[child] = parent
actionMap[child] = child[1]
我的朋友们,案子已经结案了。在从DFS到BFS的翻译过程中,在isGoalState条件中的while循环完成后,我省略了一个return语句。那是一场毫无意义的绞尽脑汁的比赛 您还可以发布isGoalState()和getSucessors()函数的实现吗?这些实现交叉引用了大量其他代码,因此我不确定它们是否有太多意义。正如我所说,在几乎相同的实现中(除了我使用堆栈而不是队列),它们工作得很好。isGoalState测试给定状态的坐标是否与BFS需要找到的“目标”匹配。GetConferences返回元组列表,每个元组表示节点的一个子节点。根据您的解释,isGoalState()对所有节点返回false,这意味着没有一个节点能够满足它。事情就这么简单。顺便说一句,BFS的实现是正确的。但是如果树被扩展到目标坐标(比如说1,1),一旦这些目标坐标从队列中弹出,它们就应该根据isGoalState进行测试,并且它应该返回true。这确实是它对BFS实现所做的。扩展算法可能包含错误。我建议您要么调试它,要么插入println。