[英]DFS Graph Generation in Python
因此,我试图更加精通Python,并决定做一个迷宫将是一件有趣的事情。 我发现此页面介绍了一些操作方法。
create a CellStack (LIFO) to hold a list of cell locations
set TotalCells = number of cells in grid
choose a cell at random and call it CurrentCell
set VisitedCells = 1
while VisitedCells < TotalCells
find all neighbors of CurrentCell with all walls intact
if one or more found
choose one at random
knock down the wall between it and CurrentCell
push CurrentCell location on the CellStack
make the new cell CurrentCell
add 1 to VisitedCells
else
pop the most recent cell entry off the CellStack
make it CurrentCell
endIf
endWhile
现在,我有了以下代码,尽管它远没有超出伪代码中显而易见的内容。
class Cell:
top_wall = 0
bottom_wall = 0
left_wall = 0
right_wall = 0
def knock_down(self,wall):
if wall is 'top_wall' and self.top_wall is 0:
self.top_wall = 1
if wall is 'bottom_wall' and self.bottom_wall is 0:
self.bottom_wall = 1
if wall is 'left_wall' and self.left_wall is 0:
self.left_wall = 1
if wall is 'right_wall' and self.right_wall is 0:
self.right_wall = 1
else
return 'Error: Wall Already Gone'
maze = [10][10]
CellStack = [] # LIFO stack to hold list of cell locations
TotalCells = 100 # Number of cells in grid
VisitedCells = 0 # Cells that have been visited
CurrentCell = 0 # The current cell
while VisitedCells < TotalCells:
我不确定班级是做细胞的最好方法,但我还没有想到另一种做细胞的方法。 但是,在检查单元格的邻居时遇到了一个问题。 在find all neighbors of CurrentCell with all walls intact
的情况下find all neighbors of CurrentCell with all walls intact
我陷入了一个循环。
您如何检查小区是否是邻居?
您可以为每个单元格指定一个位置,并存储为两个整数。 然后,如果两个整数是邻居,则两个单元为邻居。
def isCellNeighbor(c1, c2):
if abs(c1.x - c2.x) == 1: return True
if abs(c1.y - c2.y) == 1: return True
return False
如果每个单元的至少一个角彼此接触,则以上将其视为相邻单元。 您可以根据需要进行调整。
PS:看看迷宫算法的惊人集合
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.