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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

迷宫最短路径

發布時間:2025/3/16 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 迷宫最短路径 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1226: 迷宮最短路徑

時間限制: 1 Sec??內存限制: 128 MB
提交: 1??解決: 1
[提交][狀態][討論版]????? [Edit]????? [TestData]??????

題目描述

給定一個大小為N*M的迷宮。迷宮有通道和墻壁組成,每一步可以向上下左右是個方向移動。求起點到終點的最短路

M,N<=100.

輸入

創建迷宮。

輸出

輸出最短路長度。

樣例輸入

10 10#S######.# ......#..# .#.##.##.# .#........ ##.##.#### ....#....# .#######.# ....#..... .####.###. ....#...G#

樣例輸出

22 ? ? #include <cstdio> #include <iostream> #include <utility> #include <queue> #include <cstring> #define maxn 505 using namespace std; const int INF = 10000000; typedef pair<int,int> PA; //輸入 char maze[maxn][maxn+1]; //迷宮字符串 int n,m; //行列 int sx,sy; //起點 int gx,gy; //終點 int d[maxn][maxn]; //到各個位置的最短距離數組//4個方向移動的向量 int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};//求從{sx,sy}到{gx,gy}的最短距離 //如果無法到達,則是INF int bfs(){queue<PA> que;//memset(d,INF,sizeof(d)); //位置初始化為INF//不能用memset for (int i = 0; i < n; i++) for (int j = 0; j <m; j++) d[i][j] = INF;//將起點加入隊列 ,并將這一地點的距離設置為0 que.push(PA(sx,sy));d[sx][sy]=0;//不斷循環直到隊列的長度為0while(que.size()){PA p=que.front();que.pop();//如果取出的狀態已經是終點,則結束搜索if(p.first==gx&&p.second==gy) break; //四個方向循環for(int i=0;i<4;i++){//移動之后的位置為(nx,ny)int nx=p.first+dx[i];int ny=p.second+dy[i]; //判斷是否可以移動以及是否已經訪問過(d=INF訪問過) if(nx>=0&&nx<n&&ny>=0&&ny<m&&maze[nx][ny]!='#'&&d[nx][ny]==INF){//可以移動的話加入到隊列,并且到該位置的距離確定為到p的距離+1que.push(PA(nx,ny));d[nx][ny]=d[p.first][p.second]+1; } }}return d[gx][gy]; } int main(){while(cin>>n>>m){for(int i=0;i<n;i++)for(int j=0;j<m;j++){cin>>maze[i][j];if(maze[i][j]=='S'){sx=i,sy=j;}else if(maze[i][j]=='G'){gx=i;gy=j;}}printf("%d\n",bfs());}return 0; }

總結

以上是生活随笔為你收集整理的迷宫最短路径的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。