日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法提高课-搜索-最短路模型-AcWing 1076. 迷宫问题:bfs最短路、路径

發(fā)布時間:2025/4/5 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法提高课-搜索-最短路模型-AcWing 1076. 迷宫问题:bfs最短路、路径 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目分析

分析: bfs求最短路,主要原因是因為bfs是一層一層的搜,當(dāng)?shù)谝淮嗡训浇K點的時候,其實就是到終點的最短路。

  • 本題bfs倒著搜,從終點(n-1,n-1)開始搜,記錄到每個點的路徑nxt[][]
  • 輸出從起點(0,0)到終點(n-1, n-1)的路徑,順次輸出nxt[][]數(shù)組即可
  • 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;// 擴展路徑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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。