程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

校招题目:用计算机生成迷宫

发布于2019-08-06 19:17     阅读(1134)     评论(0)     点赞(3)     收藏(4)


知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

这是我初学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、接着你又可以构造自己的迷宫,但是当选择的路无法连通时,会出现如下问题:
这里写图片描述



所属网站分类: 技术文章 > 博客

作者:what

链接:https://www.pythonheidong.com/blog/article/9335/12683d835a0378e3a7e7/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

3 0
收藏该文
已收藏

评论内容:(最多支持255个字符)