1. 程式人生 > 其它 >C++ BFS模板

C++ BFS模板

技術標籤:C++模板c++bfs演算法

C++ BFS模板

題目

起點為‘S’,終點為‘E’,障礙物為‘#’,可走點為‘.’,求從起點到終點所經過的最短距離。(其實就是求最快走出迷宮的路徑長度)

思路

以從起點開始用bfs,設一個距離二維陣列存每個點到起點的距離,起點設為0,每遍歷到一個點就將這個點的距離更新為上個點的距離加一,最後判斷終點距離是否被更新過,若沒被更新過,則說明走不到終點,否則距離陣列相對應下的數值即為起點到終點的最短距離。

核心程式碼

程式碼塊

int bfs(PII start)
{
    memset(dist, -1, sizeof
(dist)); dist[start.first][start.second] = 0; queue<PII> q; q.push(start); int xx[] = { -1,0,1,0 }, yy[] = { 0,1,0,-1 }; while (!q.empty()) { auto t = q.front(); q.pop(); for (int i = 0; i < 4; ++i) { int dx = t.first + xx[i]; int
dy = t.second + yy[i]; if (dx >= 0 && dx < n && dy >= 0 && dy < m && g[dx][dy] != '#' && dist[dx][dy] == -1) { dist[dx][dy] = dist[t.first][t.second] + 1; if (g[dx][dy] == 'E') return dist[
dx][dy]; q.push({ dx,dy }); } } } return -1; }