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