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

我有一段代码,它从队列中取出一个父节点,检查它是否已被访问,如果没有访问过,则生成它的子节点,并将它们推入队列,然后重复这个循环,以先进先出的方式从队列中取出下一个父节点。不幸的是,似乎我永远无法达到目标状态。广度优先搜索(BFS)的实现方式在结构上是否有问题?我使用相同的代码,但用栈代替队列来创建深度优先搜索(DFS),得到了我想要的输出。将“q”更改为队列(FIFO)数据结构是我对这段代码唯一做的更改。还有什么我应该添加的吗?父节点/子节点是以元组的形式存储的,所以可以忽略所有这些工作——问题似乎不在那里。此外,程序在isGoalState被评估为True之前就中断了,所以那段代码似乎也没有导致问题。isGoalState测试给定状态的坐标是否与BFS需要找到的“目标”匹配。getSuccessors返回一个元组列表,每个元组代表节点的一个子节点。

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循环中遗漏了一个返回语句。这真是白费了不少脑力。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注