回顧:
[python實現] 遞迴回溯(深度優先)構造隨機迷宮_☆迷茫狗子的秘密基地☆-csdn部落格
在上次的基礎上稍加改動,可以更加直觀地欣賞整個過程
美中不足的是我想不停地原地輸出並重新整理,可惜找了很多文章都沒能達到理想的效果,
希望有大佬有實現過類似的情況可以指點一二 hhh
# 全部初始化成牆體
self.map = [[1 for x in range(self.width)] for y in range(self.height)]
def setmap(self, x, y, value):
if value == type.empty:
self.map[y][x] = 0
elif value == type.block:
self.map[y][x] = 1
def checkvisited(self, x, y):
return self.map[y][x] != 1
def showmap(self):
for row in self.map:
mp = ''
for item in row:
if item == 0:
mp += ' '
elif item == 1:
mp += ' @'
print(mp)
def checkposition(map, x, y, w, h, waitinglist):
direction =
if y > 0:
if not map.checkvisited(2 * x + 1, 2 * (y - 1) + 1):
if x > 0:
if not map.checkvisited(2 * (x - 1) + 1, 2 * y + 1):
if y < h - 1:
if not map.checkvisited(2 * x + 1, 2 * (y + 1) + 1):
if x < w - 1:
if not map.checkvisited(2 * (x + 1) + 1, 2 * y + 1):
if len(direction):
# 隨機選擇方向
direc = choice(direction)
if direc == directoin.up:
map.setmap(2 * x + 1, 2 * (y - 1) + 1, type.empty)
map.setmap(2 * x + 1, 2 * y, type.empty)
elif direc == directoin.left:
map.setmap(2 * (x - 1) + 1, 2 * y + 1, type.empty)
map.setmap(2 * x, 2 * y + 1, type.empty)
elif direc == directoin.down:
map.setmap(2 * x + 1, 2 * (y + 1) + 1, type.empty)
map.setmap(2 * x + 1, 2 * y + 2, type.empty)
elif direc == directoin.right:
map.setmap(2 * (x + 1) + 1, 2 * y + 1, type.empty)
map.setmap(2 * x + 2, 2 * y + 1, type.empty)
map.showmap()
sys.stdout.flush()
time.sleep(0.05)
return true
else:
return false
def recursive(map, w, h):
x0, y0 = (randint(0, w - 1)), (randint(0, h - 1))
map.setmap(2 * x0 + 1, 2 * y0 + 1, type.empty)
waitinglist =
cnt = 0
while len(waitinglist):
if not checkposition(map, waitinglist[-1][0], waitinglist[-1][1], w, h, waitinglist):
waitinglist.remove(waitinglist[-1])
# def setstartend(map):
# x0, y0 =
# 開始構造迷宮
def startcreatemap(map):
recursive(map, map.width // 2, map.height // 2)
# setstartend(map)
def run():
width = 31
height = 37
map = map(width, height)
startcreatemap(map)
if __name__ == "__main__":
run()
使用遞迴回溯解決迷宮問題
目的 從左上角走到右下角。地圖用陣列表示,0表示可走,1表示牆,2表示已走過 不能再走 3表示已走過但走不通。策略 向下 向右 向上 向左 初始地圖 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 1 0 1 1 0 0 1 0 0 1 1 0 0...
3 隨機迷宮生成演示程式
假期寫了個基於隨機迷宮的遊戲,學習了相關隨機迷宮的生成演算法。其他演算法都好理解,也很容易寫出來。但就是隨機prim,怎麼都寫不對,生成的迷宮亂七八糟的,急死人了 沒辦法只好看別人的,但是又死活看不明白注釋,除錯又不太直觀,只好魔改程式,讓程式顯示構造迷宮過程中各個格仔的狀態。才弄懂明白,原來是隨機...
迷宮問題讓你深度理解遞迴 回溯)
當你看到遞迴時,如果腦子裡想著迴圈,一層層向下呼叫,一層層回溯,總想著計算機的每一步是怎麼做的,這樣就會陷入學習遞迴的思維誤區 正確的做法是什麼呢?遮蔽遞迴細節 假設a問題,可以細分為bcd這三個小問題,那麼我們就應該考慮bcd這三者怎麼解決,然後能解決之後再考慮bcd和a的關係 例 如果要解決我坐...