发布于2019-08-06 19:17 阅读(1278) 评论(0) 点赞(3) 收藏(4)
这是我初学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]
程序如下:
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、首先运行程序,输入迷宫的高(m)和宽(n):
2、接着选择去哪个方向的道路,它会生成如下的图:
3、接着你又可以构造自己的迷宫,但是当选择的路无法连通时,会出现如下问题:
作者:what
链接:https://www.pythonheidong.com/blog/article/9335/12683d835a0378e3a7e7/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!