搜尋思想 DFS BFS

2021-10-09 09:04:25 字數 667 閱讀 5354

實現形式:遞迴和非遞迴

遞迴實現比較簡單,由於是前序遍歷,所以我們依次遍歷當前節點,左節點,右節點即可,對於左右節點來說,依次遍歷它們的左右節點即可,依此不斷遞迴下去,直到葉節點(遞迴終止條件)

樹的前序遍歷,實際上不管是前序遍歷,還是中序遍歷,亦或是後序遍歷,都屬於深度優先遍歷。

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

while queue 不空:

cur = queue.pop()

for 節點 in cur的所有相鄰節點:

if 該節點有效且未訪問過:

queue.push(該節點)

level = 0

while queue 不空:

size = len(queue)

for _ in range(size):

cur = queue.pop()

for 節點 in cur的所有相鄰節點:

if 該節點有效且未被訪問過:

queue.push(該節點)

}level ++;

使用佇列儲存每層的所有節點,每次把佇列裡的原先所有節點進行出佇列操作,再把每個元素的非空左右子節點進入佇列。因此即可得到每層的遍歷。

DFS BFS搜尋 題目

這篇博主寫的是圖的深搜 圖的dfs附 圖的深度優先遍歷 出處 一條魚 2011 12 26 include include struct node 圖頂點結構定義 typedef struct node graph 圖形的結構新型態 struct node head 9 圖形頂點陣列 int vis...

DFS BFS 搜尋訓練

hdu 1016 include include include using namespace std int prime 40 vis 40 num 40 n void checkprime void dfs int i for int c 2 c n c int main return 0 p...

DFS BFS 搜尋基礎

首先深搜 先看輸入格式 5 0 1 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 1 1 0 0 0 0 第一行輸入乙個數n,接下來輸入n n的數字矩陣,0代表房間,1代表牆,每個位置都可以往上下左右四個方向走 題意非常簡單,就是求以左上角為出發點所能到達的最多的房間數。inc...