我正在尝试编写代码来解决基本迷宫,该迷宫由带有“#”表示墙壁“。”的列表组成。是自由空间,S是开始,E是结束。我的算法包括首先检查右边的空间是否空闲,如果不是,则检查该空间,然后向下,最后检查左边。我也意识到,如果出现死胡同,这会带来问题,但我稍后会担心。到目前为止,我有代码可以打印列表并找到起点的索引值为(2,0)。基本上,我想做的就是以该起始值作为defsolve函数的参数,然后遍历我的算法,同时将访问的位置标记为“ x” ...如果有意义的话。现在,我需要帮助的是使代码遍历我的算法,以便使用每个if语句更新位置。我当前的代码仅将'S'替换为'x'。
maze = [['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'],
['#', '.', '.', '.', '#', '.', '.', '.', '.', '.', '.', '#'],
['S', '.', '#', '.', '#', '.', '#', '#', '#', '#', '.', '#'],
['#', '#', '#', '.', '#', '.', '.', '.', '.', '#', '.', '#'],
['#', '.', '.', '.', '.', '#', '#', '#', '.', '#', '.', 'E'],
['#', '#', '#', '#', '.', '#', '.', '#', '.', '#', '.', '#'],
['#', '.', '.', '#', '.', '#', '.', '#', '.', '#', '.', '#'],
['#', '#', '.', '#', '.', '#', '.', '#', '.', '#', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '.', '.', '#', '.', '#'],
['#', '#', '#', '#', '#', '#', '.', '#', '#', '#', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '#', '.', '.', '.', '#'],
['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#']]
def main():
print_maze()
start()
solve(start())
print_maze()
def print_maze():
for r in range(0,len(maze)):
for c in range(0,len(maze)):
print(maze[r][c], end='')
print('')
def start():
find_value = 'S'
for r in range(0,len(maze)):
for c in range (0,len(maze)):
if find_value in maze[r][c]:
return(r,c)
break
def solve(position):
r = position[0]
c = position[1]
if maze[r+1][c] == '.':
maze[r][c] = 'x'
return (r+1,c)
elif maze[r][c+1] == '.':
maze[r][c] = 'x'
return (r,c+1)
elif maze[r][c-1] == '.':
maze[r][c] = 'x'
return (r,c-1)
elif maze[r-1][c] == '.':
maze[r][c] = 'x'
return (r-1,c)
else:
print('Route Error')
main()
答案 0 :(得分:0)
变量“ r”超出了引发该异常的函数的范围(函数solve())。
您可以通过def solve(position)
来更改def solve(r, c)
。