我正在开发一个建立完美迷宫的项目。 我有一个迷宫类和一个类代表迷宫中的每个方格。在我的Cell类中,我有四个布尔变量(北,南,东,西)来表示单元格的北部还是南部有一堵墙。还有一个名为visit的布尔变量来检查单元是否被访问过。这里是我的代码,用于Cell类的init()。检查完美迷宫的输入验证
def __init__(self):
self.north = True
self.south = True
self.east = True
self.west = True
self.visit = False
而对于迷宫类,我有self.maze(一堆细胞)和self.size = N(构建一个N * N的迷宫)。 下面是类迷宫的INIT():
def __init__(self, N):
self.size = N
self.maze = [[i for i in range(N + 2)] for i in range(N + 2)]
for r in range(self.size + 2):
for c in range(self.size + 2):
self.maze[r][c] = Cell()
虽然我更新迷宫的索引,我写了两个函数来检查下一页末和newY是否在范围为1 < = X < = self.size和1 < = y < = self.size,以及是否已访问该单元格。 下面是代码:
def in_range(self, x, y):
if 1 <= x <= self.size and 1 <= y <= self.size:
return True
else:
return False
def is_valid(self, x, y):
if not self.maze[x][y].getVisit() and self.in_range(x,y):
return True
else:
return False
这一切后,我写的主要结构:
def walk(self, s, x, y):
neighbor = [(x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)]
if s.size() == self.size**2: return
else:
while True:
new = choice(neighbor)#choice() is import from random
#print(self.is_valid(new[0], new[1]))
if self.is_valid(new[0], new[1]):break
else:
if len(neighbor) != 0:
neighbor.remove(new)
new = choice(neighbor)
else:
temp = s.pop(s)
self.walk(s, temp[0], temp[1])
break
print(new)
但是,运行我的代码剧照给我的指标是不是1和self.size之间。我无法弄清楚为什么,我认为我的检查算法工作正常。 这是我得到的:
>>> ================================ RESTART
================================
>>>
>>> a = Maze(5)
>>> a.search()
1 2
(1, 3)
(2, 3)
(2, 4)
(1, 4)
(2, 4)
(2, 5)
(3, 5)
(4, 5)
(4, 4)
(4, 3)
(3, 3)
(3, 2)
(2, 2)
(2, 1)
(1, 1)
(0, 1)
(-1, 1)
(0, 1)
(1, 1)
(0, 1)
(-1, 1)
(-1, 2)
(-1, 1)
(0, 1)
有人可以帮我吗? PLZ,真的很感激!
它是[build-a-perfect-maze](http://stackoverflow.com/questions/29450400/build-a-perfect-maze-recursively-in-python)又是一周吗? – 2015-04-05 07:42:05
为什么到处使用'range(N + 2)'?这将创建一个(N + 1)x(N + 1)迷宫。只需创建Cell的[numpy.array](http://docs.scipy.org/doc/numpy/reference/generated/numpy.array.html)。 – smci 2015-04-05 08:28:44
很高兴提供帮助。你能否将你的班级代码发布到迷宫和单元? – 2015-04-05 09:11:16