算法提高课-搜索-最短路模型-AcWing 1076. 迷宫问题:bfs最短路、路径
生活随笔
收集整理的這篇文章主要介紹了
算法提高课-搜索-最短路模型-AcWing 1076. 迷宫问题:bfs最短路、路径
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目分析
分析: bfs求最短路,主要原因是因為bfs是一層一層的搜,當(dāng)?shù)谝淮嗡训浇K點的時候,其實就是到終點的最短路。
AC代碼
#include<bits/stdc++.h> #define x first #define y second using namespace std; typedef pair<int, int> PII; const int N = 1010, M = N * N;int n; int g[N][N]; PII q[M]; PII nxt[N][N]; // 從終點開始,保存前一個點,類似于路徑鏈表void bfs(int sx, int sy){int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0 ,-1};int hh = 0, tt = 0;q[hh] = {sx, sy};memset(nxt, -1 , sizeof nxt); // 初始化為 -1,代表沒確定該點nxt[sx][sy] = {0,0};while( hh <= tt){PII t = q[hh++];for(int i = 0; i < 4; i++){int a = t.x + dx[i], b = t.y + dy[i];if( a < 0 || a >= n || b < 0 || b >= n) continue;// 是墻,跳過if( g[a][b]) continue;// 如果(a,b)這個點被遍歷過if( nxt[a][b].x != -1) continue;// 擴(kuò)展路徑q[ ++ tt] = {a,b};// 記錄路徑nxt[a][b] = t;}} }int main(){cin >> n;for(int i = 0; i < n; i++)for(int j = 0; j< n; j++) cin >> g[i][j];bfs(n -1 , n -1); // 倒著搜PII end(0, 0);while(true){cout << end.x << " " << end.y << endl;if(end.x == n -1 && end.y == n-1) break;end = nxt[end.x][end.y];}}題目來源
https://www.acwing.com/problem/content/1078/
總結(jié)
以上是生活随笔為你收集整理的算法提高课-搜索-最短路模型-AcWing 1076. 迷宫问题:bfs最短路、路径的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法提高课-搜索-Flood fill算
- 下一篇: 算法提高课-搜索-最短路模型-AcWin