BFS 廣度優先搜尋經典案例

2021-09-26 05:45:21 字數 2760 閱讀 3052

牛客:迷宮最短路線問題

struct node 

int _x;

int _y;};

bool

bfs(vectorint>> graph,

int startx,

int starty,

int destx,

int desty),,

,};//標記是否可以走出去

bool flag =

false

;while

(!q.

empty()

)//如果新的位置是目標位置,結束查詢

if(newx == destx && newy == desty)

//否則新位置有障礙,或者新位置已經走過,繼續迴圈下乙個位置

}//當前位置的四個方向都進行了尋找,如果找到了結束,找到的路徑一定是最短路徑

//如果沒有找到以四個方向的新節點為起點開始新的一輪尋找

if(flag ==

true

)break

; q.

pop();

}//最後只需要返回 flag 就可以知道是否走出迷宮

return flag;

}

力扣:員工重要性

class

solution

//用乙個佇列,計算當前員工時將該員工的下屬(id)都新增到佇列中

queue<

int> q;

q.push

(id)

;//返回值:當前員工和他下屬的重要度之和

int result =0;

//佇列不為空,說明依舊有下屬的重要度沒有計算完畢

while

(!q.

empty()

)//新增完下屬員工後,從佇列中將當前員工刪除(已經計算完畢)

q.pop();

}return result;}}

;

力扣:n 叉樹的層序遍歷

class

solution

//刪除

q.pop();

}//迴圈結束後: v 儲存的是一行的結果,q 中將上一行的元素全部刪除,q 中儲存的是新的一行的所有節點

result.

push_back

(v);

v.clear()

;//清空

}return result;}}

;

力扣:腐爛的橘子

class

solution

}//step 記錄擴散的步數,從-1開始,因為即使不需要擴散下面對step仍然進行了一次++操作

//但是如果並沒有橘子,下面將不會進行++操作,也就是說step最終為-1的情況就是沒有橘子的情況

//沒有橘子的情況step應該為0,只需要最終進行處理

int step =-1

;//四個方向

int nextpos[4]

[2]=

,,,}

;while

(!q.

empty()

)}//當前位置的四個方向都被感染

q.pop();

}//所有腐爛橘子都進行了一次感染,step++

step++

;//此時佇列中的橘子都是新腐爛的橘子,舊腐爛的都已刪除

}//最後迴圈查詢,有沒有感染不到的橘子,有返回 -1

for(

int i =

0; i < row;

++i)

}return step <0?

0: step;}}

;

力扣:單詞接龍

class

solution}}

//進行了一次轉換,轉換一次後得到的字串如果匹配到了字典中,就會將這個字串新增到佇列中

//這就是一次的轉換得到的所有可能結果

//在利用這些結果進行下一次轉換

result +=1

;}//轉換不成功

return0;

}};

力扣:最小基因變化

class

solution

;

queue q;

//初始化

q.push

(start)

; visits.

insert

(start)

;int step =0;

while

(!q.

empty()

)}}}

//一次 while 迴圈結束意味著,當前步驟的所有基因序列都處理完畢

step++;}

//轉換失敗

return-1

;}};

力扣:開啟轉盤鎖

class

solution

newnum2[i]

= newnum2[i]

=='9'

?'0'

: newnum2[i]+1

;if(!deadends.

count

(newnum2)

&&!visits.

count

(newnum2))}

} step++;}

return-1

;}};

BFS廣度優先搜尋

廣度優先搜尋,利用佇列實現,結束標誌是隊列為空的時候 承接dfs的演算法實現的講例,對於迷宮問題我們也可以採取廣度優先搜尋實現 include iostream include cstdio include cstdlib using namespace std int map 55 55 int ...

bfs廣度優先搜尋

這一課我們來學習圖的另一種遍歷方法 廣度優先搜尋 breadth first search,簡稱 bfs 這是一種連通圖的常用遍歷策略,通常用於求起點到各點的最短路徑,以及求兩點之間的最優路徑等問題。首先我們先來看看廣度優先搜尋的具體方法吧 對於乙個連通圖,我們假設一開始所有頂點均未被訪問,廣度優先...

廣度優先搜尋bfs

bfs即廣度優先搜尋演算法,其是搜尋演算法中的一種。1.dfs常用於尋找是否存在解 其從a節點出發,選取乙個臨近點b,然後不斷深入,在搜尋完b的下屬節點 ehif 後,回到a再搜尋臨近a的c節點,以此類推。2.bfs則用於在最短的時間或最少的移動距離內找到解 其往往從a節點出發,搜尋周圍所有的圍繞節...