資料結構與演算法 廣度優先搜尋1

2022-05-23 04:27:09 字數 2565 閱讀 6244

廣度優先搜尋演算法:先查詢離起始頂點最近的,然後是第二進的,這樣依次往外搜尋。樹的層次遍歷就是乙個廣度搜尋演算法。

一般需要用到佇列這個資料結構,但是如果你是c語言開發,並且是在考試中,時間有限。一般臨時寫乙個佇列出來還是很耗時間的,所以一般用乙個大陣列來模擬佇列

今天做了兩道力扣題目,總結一下bfs的套路:

第一題: 542. 01 矩陣

c**實現:

1

/*廣度優先: 用大陣列實現佇列 */2

#define max_size 10000

3int numsquares(intn)4

;6int front = 0; //隊首7

int rear = 0; //隊尾8

int size = 0; //

當前佇列中元素的個數

9int visit[max_size] = ; //

visit[i]表示元素i是否已經訪問過

1011

//初始化佇列

12 queue[0] =n;

13 rear++;

14 visit[n] = 1;15

int result = 0;16

while (front < rear)

27//

入佇列28

if (visit[nextelem] != 1

) 32}33

}34}35

return

result;

36 }

view code

第二題:490. 迷宮

c**實現:

1 typedef struct

tagpos pos;56

bool haspath(int** maze, int mazesize, int* mazecolsize, int* start, int startsize, int* destination, int

destinationsize)14}

15int max_size = rowsize *colsize;

16pos queue[max_size];

17int front = 0;18

int rear = 0;19

//int size;

20 queue[0].rowindex = start[0

];21 queue[0].colindex = start[1

];22 rear++;

23 visit[start[0]][start[1]] = 1;24

int direct[4][2] = , , , };

25while (front

31for (int i = 0; i < 4; i++)

39/*

走到這裡x, y如果是有效的。那麼maze[x][y]一定為 1

40* 所以需要按照原來的方向退一格。所以是:

41* x -= direct[i][0] y -= direct[i][1];

42* 然後再判斷移位之後x,y 的情況

43*/

44 x -= direct[i][0

];45 y -= direct[i][1

];46

if (x >= 0 && x < rowsize && y >= 0 && y < colsize && visit[x][y] != 1

) 53}54

}55return

false

;56 }

view code

總結:經過上面兩道題,看到別人總結了bfs的套路,現摘抄如下:

bfs 使用佇列,把每個還沒有搜尋到的點依次放入佇列,然後再彈出佇列的頭部元素當做當前遍歷點。bfs 總共有兩個模板:

1、如果不需要確定當前遍歷到了哪一層,bfs 模板如下。

1

while

queue 不空:

2 cur =queue.pop()

3for 節點 in

cur的所有相鄰節點:4if

該節點有效且未訪問過:

5 queue.push(該節點)

view code

2、如果要確定當前遍歷到了哪一層,bfs 模板如下。

這裡增加了 level 表示當前遍歷到二叉樹中的哪一層了,也可以理解為在乙個圖中,現在已經走了多少步了。size 表示在當前遍歷層有多少個元素,也就是佇列中的元素數,我們把這些元素一次性遍歷完,即把當前層的所有元素都向外走了一步。

1 level = 0

2while

queue 不空:

3 size =queue.size()

4while (size --)

10 level ++;

view code

資料結構與演算法 搜尋 一 廣度優先搜尋

首先需要說明,這裡所說的廣度優先搜尋,與利用廣度優先搜尋對圖進行遍歷有一定的差別。廣度優先搜尋確實可以以被應用在圖的遍歷當中,但其應用遠不僅如此。我們通過乙個例題,引出廣度優先搜尋 例 勝利大逃亡 題目描述 ignatius被魔王抓走了,有一天魔王出差去了,這可是ignatius逃亡的好機會,魔王住...

資料結構 廣度優先搜尋

實驗任務 眾所周知,索隆是乙個路痴,一天在一小島上,他又迷路了!好 山治心急如焚,決定出去找他,由於練成了月步,山治的速度竟然達到了正無窮!小島上除了空地,還有盤 絲洞 簡稱 psd 盤絲洞裡住著可愛的妹紙,山治每次經過乙個盤絲洞,都要停留乙個單 位時間來欣賞妹紙,給你乙個 n m 的地圖以及山治和...

廣度優先搜尋 資料結構

廣度優先搜尋 bfs 的乙個常見應用是找出從根結點到目標結點的最短路徑。結點的處理順序是越是接近根結點的結點將越早地遍歷。佇列的入隊和出隊順序是新新增的節點不會立即遍歷,而是在下一輪中處理。結點的處理順序與它們新增到佇列的順序是完全相同的順序,即先進先出 fifo 這就是我們在 bfs 中使用佇列的...