C++ BFS模板
阿新 • • 發佈:2021-02-05
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;
}