資料結構 queue佇列應用(走迷宮)

2021-08-15 12:39:51 字數 1508 閱讀 7394

# 思路:從乙個節點開始,尋找所有下乙個能繼續走的點,根據下乙個的點繼續尋找所有能走的點,直到該點等於出口。

# 方法:建立乙個空佇列,將起點位置進隊。在佇列不為空的時候迴圈:出隊一次。如果當前位置為出口,則結束演算法;

# 否則找出當前方塊的4個相鄰方塊中可走的方塊,加入佇列。

# 和stack的優勢:第乙個出隊的終點是最短路徑

from collections import deque

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],

]dirs = [

lambda x,y:(x+1,y),

lambda x,y:(x-1,y),

lambda x,y:(x,y+1),

lambda x,y:(x,y-1),

]#通過path找到最短路徑

def shortest_path(path):

shortestpath =

curnode = path[-1]

while curnode != path[0]:

curnode = path[curnode[2]] # 根據第三個元素找到前乙個點

shortestpath.reverse()

return shortestpath

def stack_maze(x1,y1,x2,y2):

queue = deque()

path =

maze[y1][x1] = -1 # 標記起點已經走過

while len(queue) > 0:

curnode = queue.popleft()

if curnode[0] == x2 and curnode[1] == y2:

print(shortest_path(path)) # 列印最短路徑

return true

for dir in dirs: # 找四個方向

nextnode = dir(curnode[0],curnode[1])

if maze[nextnode[1]][nextnode[0]] == 0 :

# 找到下一格路

maze[nextnode[1]][nextnode[0]] = -1 # 標記這格走過,防止死迴圈

print('死路')

return false

print(stack_maze(1,1,8,8))

資料結構 佇列 queue

佇列 就是生活中的排隊,因此排隊是先到先得,也是先離開隊伍,因此佇列也是採用的先進先出的概念 fifo,慢慢想想作業系統裡面是不是也用到fifo,自己去查吧 到底有沒有 如何能夠準確的定位是先進先出呢,因此採用的就是頭指標front和尾指標rear,通常這兩個指標是封裝成乙個鏈隊 注意front與r...

資料結構 佇列 queue

佇列 queue 是一種採用先進先出 fifo 策略的抽象資料結構,它的想法來自於生活中排隊的策略。顧客在付款結賬的時候,按照到來的先後順序排隊結賬,先來的顧客先結賬,後來的顧客後結賬。同棧的實現一樣,佇列的實現也有陣列實現和鍊錶實現兩種方式。先來看看陣列實現的方法。棧使用top變數記錄棧頂的位置,...

資料結構 佇列queue

佇列 佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列是有序集合,新新增的一端為隊尾,另一端為隊頭,當乙個元素從隊尾進入佇列時,一直...