寬度優先搜尋演算法(又稱廣度優先搜尋)是最簡便的圖的搜尋演算法之一,這一演算法也是很多重要的圖的演算法的原型。dijkstra單源最短路徑演算法和prim最小生成樹演算法都採用了和寬度優先搜尋類似的思想。其別名又叫bfs,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能位置,徹底地搜尋整張圖,直到找到結果為止。
迷宮問題中和其他演算法來解決最短路徑問題。
假定有乙個迷宮,s為迷宮開始,e為迷宮的結束,迷宮之中「.」為通路,"#",為牆壁,給定特殊迷宮,求能出去的最短路徑。
迷宮小於100*100
輸入m,n小於100
白書的寫法:
#include #include #include #include using namespace std;
typedef pairp;
char migong[102][102];
const int inf = 10000000;
int res,n,m;
int sx,sy;
int gx,gy;
int d[1000][1000];
int dx[4] = ;int dy[4] = ;
int bfs()
} que.push(p(sx,sy));
d[sx][sy] = 0;
while(que.size())
}} return d[gx][gy];
}int main()
else if(migong[i][j] == 'e')
} }cout << sx 《個人寫法以及見解:
#include #include #include #include #include #include using namespace std;
struct node
;char map[102][102];
int map_bool[102][102];
int tx[4][4] = ;//本地方可以使用二維陣列來代替遍歷的方向,組合分別為
int sx,sy;
int ex,ey;
int m,n;
int bfs(int sx,int sy)}}
}int main()
if(map[i][j] == 'e')}}
cout << sx << sy << ex << ey
for(int i = 0; i < m; ++i)
cout << endl;
}cout << t <}
return 0;
}
寬度優先搜尋BFS
寬度優先搜尋 bfs,breadth first search 也是搜尋的手段之一。它與深度優先搜尋類似,從某個狀態出發探索所有可以到達的狀態。與深度優先搜尋的不同之處在於搜尋的順序,寬度優先搜尋總是先搜尋距離初始狀態近的狀態。也就是說,它是按照開始狀態 只需1次轉移就可以到達的所有狀態 只需2次轉...
寬度優先搜尋(BFS)
bfs,其英文全稱是breadth first search。0 1 4 2 3思路 從圖中某個節點出發,將該結點入隊,標記為已訪問。然後輸出佇列的隊首 第一次為起點 將隊首從佇列中刪除,訪問該結點的鄰接表,將未標記的相鄰結點入隊,並且標記為已訪問。接下來迴圈操作第二句話。按照上邊的圖,假設出發點為...
寬度優先搜尋bfs
好吧,今天看了bfs,其實發現基本思想也是不過如此。只是,應用還是不太會。bfs是寬度優先,從根節點開始,依次訪問它的所有鄰接點,然後再按順序訪問鄰接點的鄰接點,先被訪問的點的鄰接點先被訪問。由於要按這樣的順序訪問,所以需要用到佇列。求最短路徑和迷宮型別的題目都可以利用bfs.下面是基本步驟 1 從...