Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 广度优先搜索-为什么我的队列被清空?_Python_Algorithm_Artificial Intelligence - Fatal编程技术网

Python 广度优先搜索-为什么我的队列被清空?

Python 广度优先搜索-为什么我的队列被清空?,python,algorithm,artificial-intelligence,Python,Algorithm,Artificial Intelligence,我的代码从队列中获取父节点,检查它是否被访问,如果没有,生成它的子节点,将它们推送到队列中,并重复循环,以FIFO方式从队列中获取下一个父节点。不幸的是,我似乎从未达到我的目标状态。我实施BFS的方式在结构上是否有问题?我使用堆栈而不是队列来创建DFS搜索,使用相同的代码获得了所需的输出。将“q”更改为队列(FIFO)数据结构实际上是我对该代码所做的唯一更改。还有什么我要补充的吗?父/子对象存储为元组,因此可以忽略所有这些工作——这似乎不是问题所在。此外,程序在isGoalState求值为Tru

我的代码从队列中获取父节点,检查它是否被访问,如果没有,生成它的子节点,将它们推送到队列中,并重复循环,以FIFO方式从队列中获取下一个父节点。不幸的是,我似乎从未达到我的目标状态。我实施BFS的方式在结构上是否有问题?我使用堆栈而不是队列来创建DFS搜索,使用相同的代码获得了所需的输出。将“q”更改为队列(FIFO)数据结构实际上是我对该代码所做的唯一更改。还有什么我要补充的吗?父/子对象存储为元组,因此可以忽略所有这些工作——这似乎不是问题所在。此外,程序在isGoalState求值为True之前中断,因此代码似乎也不会导致问题。isGoalState测试给定状态的坐标是否与BFS需要找到的“目标”匹配。GetConferences返回元组列表,每个元组表示节点的子级

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。