bfs思路總結

2022-08-21 04:03:10 字數 1051 閱讀 1076

(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來到幼兒園的第四天,幼兒園老師在值班的時候突然發現幼兒園某處發生火災,而且火勢蔓延極快,老師在第一時間就發出了警報,位於...