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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

误落迷宫2(BFS)

發布時間:2023/12/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 误落迷宫2(BFS) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述
希里掉入三夫人的迷宮了,這是一個真正的迷宮,蜿蜒復雜,希里的目的只有一個,那就是找到三夫人,到達出口。
給定一個二維矩陣表示迷宮,你需要做到的是,從迷宮的出口處找到三夫人,再從三夫人處走向終點。
其中’S’表示起始點,'T’表示三夫人處,'E’表示迷宮重點。
'1’表示墻壁,意思是不可達位置,'0’表示通路,意思是可以移動的位置
每次移動可以從上下左右四個方向進行移動。
你需要告訴希里,最短需要走多少步能夠完成上述目標。
輸入
第一行一個n,m分別表示迷宮的大小。
接下來n行每行m字符表示迷宮
2 < n,m <= 50
輸出
達成目標的最小步數
樣例輸入
8 8
1S111111
10000001
11101101
1T001001
10011001
10000001
10000001
111E1111
樣例輸出
13
思路:無非就是同樣的動作重復了兩遍,我們先從S出發找到T,再從T出發找到E。兩遍BFS就可以啦。
代碼如下:

#include<bits/stdc++.h> #define ll long long using namespace std;const int maxx=51; int d[][2]={{1,0},{0,1},{-1,0},{0,-1}}; struct Pll{int first,second,num;Pll(int a,int b,int c){first=a,second=b,num=c;} }; char s[maxx][maxx]; int vis[maxx][maxx]; int n,m;inline int bfs(int sx,int sy,int ex,int ey) {memset(vis,0,sizeof(vis));vis[sx][sy]=1;queue<Pll> q;q.push(Pll(sx,sy,0));while(q.size()){Pll u=q.front();q.pop();if(u.first==ex&&u.second==ey) return u.num;for(int i=0;i<4;i++){int tx=u.first+d[i][0];int ty=u.second+d[i][1];if(tx<0||tx>=n||ty<0||ty>=m||vis[tx][ty]||s[tx][ty]=='1') continue;vis[tx][ty]=1;q.push(Pll(tx,ty,u.num+1));}} } int main() {scanf("%d%d",&n,&m);for(int i=0;i<n;i++) scanf("%s",s[i]);int sx,sy,ex,ey,tx,ty;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(s[i][j]=='S') sx=i,sy=j;if(s[i][j]=='E') ex=i,ey=j;if(s[i][j]=='T') tx=i,ty=j;}}printf("%d\n",bfs(sx,sy,tx,ty)+bfs(tx,ty,ex,ey));return 0; }

努力加油a啊,(o)/~

總結

以上是生活随笔為你收集整理的误落迷宫2(BFS)的全部內容,希望文章能夠幫你解決所遇到的問題。

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