python - 在 Python 中运行无限循环的广度优先搜索算法
问题描述
我正在尝试使用 python 中的广度优先搜索算法创建一个迷宫。但是,我的程序正在进入一个无限循环。它应该检查每个空格,上、下、左和右。然后,该空间被放入访问列表中。在算法检查每个空间并将它们放入访问列表后,它应该回溯以找到到起点的最短路径。当它回溯时,它应该把 1 放在最短的路线上。
import queue
import re
def maze_3():
maze3 = [
'00000S000000000000000000000000000000000000000000000000000000000',
'00000 000000000 ',
'00000 000000000 000000000000000000 000000000000000 00000000',
'000000 00000000 000000 00000',
' 00000000 000000000000 000000000000000000 000000',
'00000000 000000000000000000000000000000 0000 000000',
'000000 000 000000000 000 000000 0000',
'000000 000 000000000 00000000 000000 00',
'00 000 0 0000000000 000 000 0000 00 00 00000 000',
'000000 000000 000000000 000 0000 00000',
'0000000000000000 0000000 0000000 000 00000000000',
'000000 000 0000000 0000 00000000000000 00000000',
'0000000000000000E 0000000',
]
return maze3
def finished_maze(maze, solution=''):
global starting_point
starting_point = 0
for position in range(len(maze[0])):
if position == 'S':
starting_point = maze[i]
break
j = starting_point
k = 0
position = set()
for move in solution:
if move == 'Up':
k -= 1
print(move)
elif move == 'Down':
k += 1
print(move)
elif move == 'Left':
j -= 1
print(move)
elif move == 'Right':
j += 1
print(move)
for row in range(len(maze)):
for column in range(len(maze[0])):
if (maze[row], maze[column]) in position:
print('1 ', end='')
else:
print(column + '', end='')
print()
def is_valid(maze, moves):
global starting_point
a = True
for position in range(len(maze[0])):
if position == 'S':
starting_point = maze[position]
j = starting_point
k = 0
for move in re.findall('[A-Z][a-z]*', moves):
if move == 'Up':
k -= 1
elif move == 'Down':
k += 1
elif move == 'Left':
j -= 1
elif move == 'Right':
j += 1
if not ((j >= 0 and j < len(maze[0])) and (k >= 0 and k < len(maze[0]))):
return not a
elif maze[k][j] == '0':
return not a
return a
def find_solution(maze, moves):
global starting_point
starting_point = 0
global visited
visited = []
global move
move = 0
a = True
for position in range(len(maze[0])):
if position == 'S':
starting_point = maze[position]
j = starting_point
k = 0
if moves in visited:
return not a
for move in re.findall('[A-Z][a-z]*', moves):
if move == 'Up':
k -= 1
elif move == 'Down':
k += 1
elif move == 'Left':
j -= 1
elif move == 'Right':
j += 1
if maze[k][j] == 'E':
print(moves)
print(finished_maze(maze, moves))
return a
visited.append(move)
return not a
space = queue.Queue()
space.put('')
put = ''
maze = maze_3()
while not find_solution(maze, put):
put = space.get()
for i in ['Up', 'Down', 'Left', 'Right']:
piece = put + i
if is_valid(maze, piece):
space.put(piece)
解决方案
推荐阅读
- java - 离子构建错误:无法使用 BuildScopeServices.createScriptPluginFactory() 创建 ScriptPluginFactory 类型的服务
- php - PHP - 当数字“foreach 键”丢失时,如何在“辅助数组”中对位置进行排序和排列
- azure - 将 Azure 可用性集转换为托管会导致停机吗?
- r - 在 R Shiny 中,可以使用 DT::dataframe 以交互方式突出显示单元格吗?
- c# - 如何从 C# 正确执行链接服务器存储过程
- r - 组上两列的测试条件
- usb - USB-MIDI 事件数据包中的电缆编号字段代表什么?
- postgresql - docker 容器中 PostgreSQL 的权限问题
- visual-studio-code - 将 git-bash 与 Visual Studio 代码一起使用
- selenium - Cucumber 场景嵌入两次导致使用相同文件名拍摄的两个屏幕截图