1. 程式人生 > 其它 >[ python深度優先搜尋] 利用棧走迷宮

[ python深度優先搜尋] 利用棧走迷宮

技術標籤:python演算法深度搜索

問題:給定一個迷宮列表,以及起點終點座標,判斷能否走通,並列印路線。(‘0’是通路)

 maze = \
    [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
     [1, 0, 0, 1, 0, 0, 0, 1, 0, 1],
     [1, 0, 0, 1, 0, 0, 0, 1, 0, 1],
     [1, 0, 0, 0, 0, 1, 1, 0, 0, 1],
     [1, 0, 1, 1, 1, 0, 0, 0, 0, 1],
     [1, 0, 0, 0, 1, 0, 0, 0, 0, 1],
     [1, 0, 1, 0, 0, 0, 1, 0, 0, 1],
     [
1, 0, 1, 1, 1, 0, 1, 1, 0, 1], [1, 1, 0, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] def maze_path(x1, y1, x2, y2): # 起點終點 dirs = [ lambda x, y: (x + 1, y), lambda x, y: (x, y + 1), lambda x, y: (x - 1, y), lambda x, y: (x, y - 1) ] # 四個方向 stack =
[(x1, y1)] # 棧 while len(stack) > 0: curNode = stack[-1] if curNode[0] == x1 and curNode[1] == x2: # 判斷走到終點了 for p in stack: print(p) # 列印路線 return True # 嘗試四個方向 上:x-1,y 下:x+1,y 左:x,y-1 右: x,y+1 for dir in dirs:
nextNode = dir(curNode[0], curNode[1]) if maze[nextNode[0]][nextNode[1]] == 0: stack.append(nextNode) maze[nextNode[0]][nextNode[1]] = 2 break else: # 如果當前的路線走到死衚衕時,把當前節點標記成2,並且出棧 maze[nextNode[0]][nextNode[1]] = 2 stack.pop() else: print('走不通!') return False maze_path(1, 4, 8, 7)