CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
jackfrued

CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!

GitHub Repository: jackfrued/Python-100-Days
Path: blob/master/公开课/文档/第06次公开课-算法入门系列2-在水一方/code/example03.py
Views: 729
1
"""
2
迷宫寻路
3
"""
4
import random
5
import sys
6
7
WALL = -1
8
ROAD = 0
9
10
ROWS = 10
11
COLS = 10
12
13
14
def find_way(maze, i=0, j=0, step=1):
15
"""走迷宫"""
16
if 0 <= i < ROWS and 0 <= j < COLS and maze[i][j] == 0:
17
maze[i][j] = step
18
if i == ROWS - 1 and j == COLS - 1:
19
print('=' * 20)
20
display(maze)
21
sys.exit(0)
22
find_way(maze, i + 1, j, step + 1)
23
find_way(maze, i, j + 1, step + 1)
24
find_way(maze, i - 1, j, step + 1)
25
find_way(maze, i, j - 1, step + 1)
26
maze[i][j] = ROAD
27
28
29
def reset(maze):
30
"""重置迷宫"""
31
for i in range(ROWS):
32
for j in range(COLS):
33
num = random.randint(1, 10)
34
maze[i][j] = WALL if num > 7 else ROAD
35
maze[0][0] = maze[ROWS - 1][COLS - 1] = ROAD
36
37
38
def display(maze):
39
"""显示迷宫"""
40
for row in maze:
41
for col in row:
42
if col == -1:
43
print('■', end=' ')
44
elif col == 0:
45
print('□', end=' ')
46
else:
47
print(f'{col}'.ljust(2), end='')
48
print()
49
50
51
def main():
52
"""主函数"""
53
maze = [[0] * COLS for _ in range(ROWS)]
54
reset(maze)
55
display(maze)
56
find_way(maze)
57
print('没有出路!!!')
58
59
60
if __name__ == '__main__':
61
main()
62
63