如何解决Python中广度优先算法的问题
[已编辑] 我正在尝试使用广度优先算法解决 Python 中的问题。我创建了一个 Class 来从给定的节点生成子节点(我知道这可以正常工作,因为我已经测试过用另一个求解器代码调用这个生成器)。所以,我的问题一定出在这短短的几行代码中:
def bfs(self,node):
queue=[]
visited_nodes=[]
memory_use = len(visited_nodes)
queue.append(node)
is_solution=False
while not is_solution:
if len(queue)==0:
print('Unsolvable board!')
is_solution=True
else:
s=queue.pop(0)
visited_nodes.append(s)
if s.isWinningState():
is_solution=True
print('Winning state achieved.')
self.showPath(s)
print('Max memory usage: ',memory_use)
else:
children = s.generateChildren()#deque with all possible states/nodes
if len(children) > 0:
for child in children:
if child not in visited_nodes:
queue.append(child)
尽管没有返回正确的访问节点数,但它需要大约 1 秒的时间来解决。
使用第一个代码,它会永远运行(我在 15 分钟后杀死了终端)。有人可以帮我弄清楚这里出了什么问题吗?
谢谢
解决方法
当您遍历子节点时,不应将子节点附加到visited_nodes。
之前,您应该将节点附加到队列中 从队列中弹出后,将节点附加到visited_nodes
def bfs(self,node):
queue=[]
visited_nodes=[]
memory_use = len(visited_nodes)
queue.append(node)
while queue:
s=queue.pop(0)
visited_nodes.append(s)
if self.finalStateAchieved:
return
if s.isWinningState():
print('Winning state achieved.')
self.showPath(s)
self.finalStateAchieved = True
print('Max memory usage: ',memory_use)
else:
children = s.generateChildren()#list with all possible states/nodes
if len(children) > 0:
for child in children:
if child not in visited_nodes:
queue.append(child)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。