这是我初学python时写的一个校招题目,这个程序还有不少问题,仅供参考。
校招题目
用计算机生成迷宫是一个很有趣的任务。我们可以用 道路网格(Road Grid) 来表示迷宫的道路,那么 3 x 3
的 道路网格(图-1 左)可以对应一个 7 x 7 的 渲染网格(Render Grid) ——图-1 右 的方式(迷宫的墙是灰
色的,道路是白色的):
如果我们将迷宫 道路网格 两个相邻的 cell 连通,则可以打通道路。如 图-2 所示:
连通 道路网格 有如下的约束条件:
● 每一个 cell 只能够直接与相邻正南、正北、正东、正西的 cell 连通。不能够和其他的 cell 连通。
● 两个 cell 之间的连通一定是双向的。即 cell(0,0) 和 cell(1,0) 连通等价于 cell(1,0) 和cell(0,0) 的连通。
要求1:将迷宫渲染为字符串
现在我们希望你书写程序,将给定迷宫的 道路网格,渲染为字符串输出。例如,其使用方式如下(伪代码
,仅做演示,实际实现时请应用实际语言的编程风格)
Maze maze = MazeFactory.Create(command);
String mazeText = maze.Render();
其中 command 是一个字符串。它的定义如下:
● 第一行是迷宫 道路网格 的尺寸。例如 3 x 3 的迷宫为 3 3,而 5 x 4 的迷宫为 5 4(5 行 4 列)。
● 第二行是迷宫 道路网格 的连通性定义。如果 cell(0,1) 和 cell(0,2) 是连通的,则表示为:
0,1 0,2,多个连通以分号 ; 隔开。
例如,如果给定输入:
3 3
0,1 0,2;0,0 1,0;0,1 1,1;0,2 1,2;1,0 1,1;1,1 1,2;1,1 2,1;1,2 2,2;2,0 2,1
则输出字符串为(如果当前 渲染网格 为墙壁,则输出 [W] 如果为道路则输出 [R]):
[W] [W] [W] [W] [W] [W] [W]
[W] [R] [W] [R] [R] [R] [W]
[W] [R] [W] [R] [W] [R] [W]
[W] [R] [R] [R] [R] [R] [W]
[W] [W] [W] [R] [W] [R] [W]
[W] [R] [R] [R] [W] [R] [W]
[W] [W] [W] [W] [W] [W] [W]
Readme
使用语言:python
程序如下:
import re
class FormatError(Exception):
pass
try:
while(1):
m = int(input("\nm = "))
n = int(input("n = "))
N = [['[W]']*(n*2+1) for i in range(m*2+1)]
for x in range(m*2+1):
for y in range(n*2+1):
if x%2 == 1 and y%2 == 1:
N[x][y] = "[R]"
for i in range(m*2+1):
print("\n")
for j in range(n*2+1):
print(N[i][j],end=" ")
print("\n\ninput way to go: ")
line = input()
linestr = line.split(";")
for i in range(0, len(linestr)):
r = re.split(r"[\s+\,]",linestr[i])
for j in range(0, 4):
if(r[0]!=r[2] and r[1]!=r[3]):
raise FormatError("Maze format error.")
else:
N[int(r[0])+int(r[2])+1][int(r[1])+int(r[3])+1] = "[R]"
for i in range(m*2+1):
print("\n")
for j in range(n*2+1):
print(N[i][j],end=" ")
except FormatError as e:
print(e)
except NameError:
print("Invalid number format.")
except ValueError:
print("Incorrect command format.")
except IndexError:
print("Number out of range.")
except KeyboardInterrupt:
print("Programme quit.")1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
1、首先运行程序,输入迷宫的高(m)和宽(n):
2、接着选择去哪个方向的道路,它会生成如下的图:
3、接着你又可以构造自己的迷宫,但是当选择的路无法连通时,会出现如下问题: