python随机迷宫生成
时间: 2023-10-26 19:08:26 浏览: 216
以下是使用Python生成随机迷宫的示例代码:
```python
import random
# 迷宫的大小
maze_size = 10
# 生成迷宫的二维数组
maze = [[1 for i in range(maze_size)] for j in range(maze_size)]
# 设置起点和终点
start = (0, 0)
end = (maze_size - 1, maze_size - 1)
# 随机选择起点和终点
while start == end:
start = (random.randint(0, maze_size - 1), random.randint(0, maze_size - 1))
end = (random.randint(0, maze_size - 1), random.randint(0, maze_size - 1))
# 将起点和终点设为通路
maze[start[0]][start[1]] = 0
maze[end[0]][end[1]] = 0
# 迷宫生成算法
def generate_maze(x, y):
directions = [(0, 1), (0, -1), (1, 0), (-1, 0)]
random.shuffle(directions)
for direction in directions:
next_x = x + direction[0]
next_y = y + direction[1]
if next_x < 0 or next_x >= maze_size or next_y < 0 or next_y >= maze_size:
continue
if maze[next_x][next_y] == 1:
maze[x + direction[0] // 2][y + direction[1] // 2] = 0
maze[next_x][next_y] = 0
generate_maze(next_x, next_y)
# 从起点开始生成迷宫
generate_maze(start[0], start[1])
# 输出迷宫
for i in range(maze_size):
for j in range(maze_size):
if maze[i][j] == 0:
print(" ", end="")
else:
print("#", end="")
print()
```
在这个示例中,我们使用递归回溯算法生成迷宫。该算法通过随机选择一个未访问的邻居结点,将它与当前结点之间的墙壁打通,然后将该邻居结点作为新的当前结点,并重复上述步骤,直到所有结点都被访问。
我们使用一个二维数组来表示迷宫,其中0表示通路,1表示墙壁。在迷宫生成过程中,我们首先随机选择起点和终点,并将它们设为通路。然后,从起点开始,递归调用generate_maze函数,该函数随机选择一个未访问的邻居结点,并将它与当前结点之间的墙壁打通。最后,我们输出生成的迷宫。
阅读全文