BFS 廣搜 的套路化操作

2021-10-11 03:21:58 字數 1489 閱讀 4899

運用c++stl庫中的佇列queue

展開對中間狀態的判斷

對於每次符合條件的元素進行入隊操作

不斷狀態轉移後的乙個符合題意的結果,即為最優解

###基本模板

int dx[4]

=;int dy[4]

=;//定義四個方向

` point s;

//s為擁有x,y,step的結構體變數

s.x=sx;

s.y=sy;

s.step =0;

//完成初始化

v[s.x ]

[s.y]=1

;int x, y;

r.push

(s);

while

(!r.

empty()

)for

(int k=

0;k<=

3;k++)}

r.pop();

};其中v[

]為標記陣列,a[

]為地圖標記陣列

####例題

鐵達尼克號遇險了 它發出了求救訊號。距離最近的哥倫比亞號收到了訊息。時間就是生命,必須盡快趕到那裡通過偵測,哥倫比亞要獲取了一張海洋圖 這張海洋圖上劃分成了n*n個比較小的單位,用1表示陸地 用0表示海洋 船隻能從乙個格仔移到相鄰的4個格仔裡。 為了盡快趕到出事地點,哥倫比亞號最少要走多少距離。

input

第一行,n 以下的n*n行為乙個0,1矩陣,表示海洋地圖

最後一行為4個小於n的整數 表示 哥倫比亞號 和鐵達尼克號的座標

output

哥倫比亞號到鐵達尼克號的最短距離 ,答案精確到整數。

sample input copy

3001

101100

1 1 3 3

sample output4解答

#include

#include

#include

#include

using namespace std;

char a[

1005][

1005];

int v[

1005][

1005];

struct point

;int dx[4]

=;int dy[4]

=;queue r;

intmain()

/*5 4

1 1 2 1

1 1 1 1

2 1 2 1

1 2 1 1

1 1 1 2

1 1 4 3

*/for(

int k=

0;k<=

3;k++)}

r.pop();

}if(flag ==0)

printf

("no answer");

return0;

}

廣搜模版BFS

define n 305 行 define m 305 列 struct zuobiao p,k char t n m int vis n m n,m,kk int q x,q y,z x,z y int dir 4 2 迴圈處理座標上下左右 priority queueq int judge 判斷...

bfs 廣搜 模板

廣度優先搜尋演算法 breadth first search 又譯作寬度優先搜尋,或橫向優先搜尋,簡稱bfs,是一種圖形搜尋演算法。簡單的說,bfs是從根節點開始,沿著樹的寬度遍歷樹的節點。因為所有節點都必須被儲存,因此bfs的空間複雜度為 o v e 其中 v 是節點的數目,而 e 是圖中邊的數目...

廣搜 BFS 總結

bfs的基本思想是 首先訪問初始點v並將其標誌為已經訪問。接著通過鄰接關係將鄰接點入隊。然後每訪問過乙個頂點則出隊。按照順序,訪問每乙個頂點的所有未被訪問過的頂點直到所有的頂點均被訪問過。廣度優先遍歷類似與層次遍歷。其特點是盡可能先對橫向進行搜尋,從指的出發點,按照該點的路徑長度由短到長的順序訪問圖...