(1)將初始狀態加入佇列
(2)初始狀態出隊,進行節點擴充套件。可能是狀態轉移,列出狀態轉移方程
(3)在進行擴充套件中,需要判斷節點不要重複擴充套件。基本思路是設立visited陣列,標記狀態是否被訪問過。將狀態用乙個整數表示,整數則可以是陣列下標,該陣列下標對應的陣列元素的值即是狀態是否被訪問的標誌。即:狀態-》整數-》陣列下標-》陣列元素的值,參考八數碼中的康托展開。
(4)在擴充套件中,判斷是否到達目標狀態,如果是,則跳出迴圈,得出結果,問題有解;若果不是,重複(3),直到隊列為空,問題無解。
以hdu1548為例
#include#include#include
using
namespace
std;
int steps[205]=;
bool visited[205]=;
struct
statenode;
int bfs(int start,int end,int
n);int
main()
if(start==end)
cout
<<0
cout
cin>>n;
}return0;
}int bfs(int start,int end,int
n); q.push(s);
visited[start]=0
;
while(!q.empty())
else
}statenode nextdown=first;
nextdown.index=first.index-steps[first.index];
if(nextdown.index>=1&&visited[nextdown.index])}}
return -1
;}
**已ac
參考文獻
藍橋杯演算法總結
bfs寬度優先思想
a strange lift
有關bfs的題目
bfs小結
BFS 思路加簡單例題
上次講的dfs是一直往前走,直到無路可走的時候就返回,而bfs不一樣。bfs是廣度優先搜尋,顧名思義就是橫著來搜尋,也就是按層次來搜尋,一層層來搜尋。廣度優先搜尋是一種分層的查詢過程,每向前走一步可能訪問一批頂點,不像深度優先搜尋 dfs 那樣有回退的情況,因此它不是乙個遞迴的演算法,為了實現逐層的...
bfs學習記錄 模板 思路彙總
hb小鹹魚學習記錄 小結藍橋杯刷了不少的搜尋題,但是bfs的題很少,大部分都是dfs的題。但是去年藍橋杯就考了bfs,所以還是得好好刷題。bfs由於是乙個迴圈進行搜尋,所以沒法回溯,因而每個點位只能被走一次。這樣加快了搜尋速度,但是由於每個點只能走一次導致無法列舉出所有的可走路徑。而這樣的好處是避免...
bfs 思路 hrbust院賽初賽D
逃脫 時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 這是mengxiang000和tabris來到幼兒園的第四天,幼兒園老師在值班的時候突然發現幼兒園某處發生火災,而且火勢蔓延極快,老師在第一時間就發出了警報,位於...