搜索 —— 广度优先搜索(BFS)
生活随笔
收集整理的這篇文章主要介紹了
搜索 —— 广度优先搜索(BFS)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
【概述】
廣度優(yōu)先搜索從初始狀態(tài) S 開始,利用給定的規(guī)則,生成當前狀態(tài)所有可能的狀態(tài),構成的下一層節(jié)點,檢查是否出現(xiàn)目標狀態(tài)G,若未出現(xiàn),就對該層所有狀態(tài)節(jié)點,分別順序利用規(guī)則再次生成再下一層的所有狀態(tài)節(jié)點,對這一層的所有狀態(tài)節(jié)點檢查是否出現(xiàn) G,若未出現(xiàn),繼續(xù)按上面思想生成再下一層的所有狀態(tài)節(jié)點,這樣一層一層往下展開,直到出現(xiàn)目標狀態(tài)為止。
?廣度優(yōu)先搜索可以采用循環(huán)隊列或動態(tài)鏈表來處理,其適用于逐層尋找答案。
????
【具體過程】
????廣度優(yōu)先即是要按層數(shù)一層一層來遍歷,先將一層全部擴展,然后再進行下一層。
????過程:
對應隊列情況:
????
每個方塊表示一個狀態(tài),淺藍色的表示遍歷了該狀態(tài)
對應的隊列的情況
【搜索框架】
int bfs() {初始化,初始狀態(tài)存入隊列;隊列首指針head=0;隊列尾指針tail=1; do{指針head后移一位,指向待擴展結點;for(i=1;i<=max;i++)//max為產生子結點的規(guī)則數(shù){if(子結點符合條件){tail指針+1,將新結點存入列尾;if(新結點與原已產生節(jié)點重復)刪去該結點(取消入隊,tail指針-1);else if(新結點是目標結點)輸出并退出;}}}while(head<tail);//隊列為空 }【例題】
同題:Knight Moves(信息學奧賽一本通-T1257):點擊這里
總結
以上是生活随笔為你收集整理的搜索 —— 广度优先搜索(BFS)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛C++语言: 比身高
- 下一篇: 空格分隔输出(信息学奥赛一本通-T102