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

本文介绍了一个使用Python编写的迷宫生成程序。该程序通过定义迷宫的道路网格和连通性,将迷宫渲染成字符串形式。文章提供了程序源代码,并详细解释了如何创建和渲染迷宫。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是我初学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、首先运行程序,输入迷宫的高(m)和宽(n):

这里写图片描述
2、接着选择去哪个方向的道路,它会生成如下的图:

这里写图片描述
3、接着你又可以构造自己的迷宫,但是当选择的路无法连通时,会出现如下问题:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜亚轲

你花钱的样子真帅

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值