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

我有一段代码,它从队列中取出一个父节点,检查它是否已被访问,如果没有访问过,则生成它的子节点,并将它们推入队列,然后重复这个循环,以先进先出的方式从队列中取出下一个父节点。不幸的是,似乎我永远无法达到目标状态。广度优先搜索(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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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