走出迷宮 詳細介紹BFS

2021-10-06 20:16:17 字數 1455 閱讀 5927

bfs介紹:

已知圖g=(v,e)和乙個源頂點s,寬度優先搜尋以一種系統的方式探尋g的邊,從而「發現」s所能到達的所有頂點,並計算s到所有這些頂點的距離(最少邊數),該演算法同時能生成一棵根為s且包括所有可達頂點的寬度優先樹。對從s可達的任意頂點v,寬度優先樹中從s到v的路徑對應於圖g中從s到v的最短路徑,即包含最小邊數的路徑。該演算法對有向圖和無向圖同樣適用。

bfs特點:

演算法自始至終一直通過已找到和未找到頂點之間的邊界向外擴充套件,就是說,演算法首先搜尋和s距離為k的所有頂點,然後再去搜尋和s距離為k+l的其他頂點

用顏色解釋bfs:

為了保持搜尋的軌跡,寬度優先搜尋為每個頂點著色:白色(非灰且非黑即為白)、灰色(牆 / 不可到達點)或黑色(可到達點)。演算法開始前所有頂點都是白色,隨著搜尋的進行,各頂點會逐漸變成灰色,然後成為黑色。在搜尋中第一次碰到一頂點時,我們說該頂點被發現,此時該頂點變為非白色頂點。因此,灰色和黑色頂點都已被發現,但是,寬度優先搜尋演算法對它們加以區分以保證搜尋以寬度優先的方式執行。若(u,v)∈e且頂點u為黑色,那麼頂點v要麼是灰色,要麼是黑色,就是說,所有和黑色頂點鄰接的頂點都已被發現。灰色頂點可以與一些白色頂點相鄰接,它們代表著已找到和未找到頂點之間的邊界。

模板題:

走出迷宮

**:

#include

using

namespace std;

int s, t, n, m;

int mp[

510]

[510];

int dis[

510]

[510];

int dir[4]

[2]=

,,,}

;//方向陣列

queue<

int> q;

intbfs

(int s,

int t)

}return0;

}int

main()

else

if(c ==

'e')

else

if(c ==

'.')

else

if(c ==

'#')}if

(bfs

(s, t)

)printf

("yes\n");

else

printf

("no\n");

}return0;

}

BFS 走出迷宮 我的第一道BFS

用s表示出發點,用.表示可以走的點,用g表示最後的終點,用 表示牆,不能通過。計算出能不走出迷宮,如果能走出迷宮,就計算出最短路徑。用乙個dis二維陣列在dis x y 處專門儲存起點到 x,y 的距離。先將起點push進佇列,然後將此處的dis設定為0,然後進入迴圈。得到佇列的第乙個元素front...

6264 走出迷宮

總時間限制 1000ms 記憶體限制 65536kb 描述 當你站在乙個迷宮裡的時候,往往會被錯綜複雜的道路弄得失去方向感,如果你能得到迷宮地圖,事情就會變得非常簡單。假設你已經得到了乙個n m的迷宮的圖紙,請你找出從起點到出口的最短路。輸入 第一行是兩個整數n和m 1 n,m 100 表示迷宮的行...

6264 走出迷宮

總時間限制 1000ms 記憶體限制 65536kb 描述 當你站在乙個迷宮裡的時候,往往會被錯綜複雜的道路弄得失去方向感,如果你能得到迷宮地圖,事情就會變得非常簡單。假設你已經得到了乙個n m的迷宮的圖紙,請你找出從起點到出口的最短路。輸入第一行是兩個整數n和m 1 n,m 100 表示迷宮的行數...