bfs的基本思想是:
首先訪問初始點v並將其標誌為已經訪問。接著通過鄰接關係將鄰接點入隊。然後每訪問過乙個頂點則出隊。按照順序,訪問每乙個頂點的所有未被訪問過的頂點直到所有的頂點均被訪問過。
廣度優先遍歷類似與層次遍歷。其特點是盡可能先對橫向進行搜尋,從指的出發點,按照該點的路徑長度由短到長的順序訪問圖中各頂點。
利用佇列先進先出的性質,從起點開始,將一步能到達的點全部存入佇列,然後將佇列中隊首元素出隊,執行與起點相同的操作,以此迴圈,直到到達終點或者隊列為空,隊列為空說明可以到達的點都已經遍歷過了,也就是說沒有路可以到達終點。
下圖是以廣搜方法走迷宮的到每個位置的所需步數
)//判斷是否是終點
for(
int i=
0;i<
4;i++
)//四個方向}}
}迷宮:s為入口,g為出口
/*
10 10
#s######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#...g#
*//*
10 10
#s######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#..#g#
*/#include
#include
#include
using namespace std;
char a[
201]
[201];
bool vis[
201]
[201];
//記錄訪問過沒有
int dx[4]
=;int dy[4]
=;int n,m;
int sx,sy,ex,ey;
struct node};
bool judge
(int x,
int y)
//判斷是否可以走,不能走返回1,否則返回0;
intbfs()
//返回從(x,y)開始廣搜,到右下角的最短步數,如果無法到達右下角,返回0
}return-1
;}intmain()
else
if(a[i]
[j]==
's')
}int step =
bfs();
cout<
return0;
}
例題:rescu 廣搜模版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 只是簡單的知道如何遍歷,不算熟練 現在終於會了。下面詳細講一下bfs。廣搜,即廣度優先搜尋。不像深搜那樣有回溯的過程。大致思想用乙個圖來表示 從頂點v1開始遍歷,訪問過,就將v1入隊。接著,訪問v2以及v3 v2和v3沒有必須的順序之分,可以自己定義先後順序 再...