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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

6264:走出迷宫(DFS和BFS)

發布時間:2025/5/22 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 6264:走出迷宫(DFS和BFS) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
描述

當你站在一個迷宮里的時候,往往會被錯綜復雜的道路弄得失去方向感,如果你能得到迷宮地圖,事情就會變得非常簡單。
假設你已經得到了一個n*m的迷宮的圖紙,請你找出從起點到出口的最短路。

輸入
第一行是兩個整數n和m(1<=n,m<=100),表示迷宮的行數和列數。
接下來n行,每行一個長為m的字符串,表示整個迷宮的布局。字符'.'表示空地,'#'表示墻,'S'表示起點,'T'表示出口。
輸出
輸出從起點到出口最少需要走的步數。
DFS
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cctype> #include <algorithm>using namespace std;int n,m,walk[200][200],sx,sy,ex,ey,ans=0x3f3f3f3f; char s[200][200];int row[4]={-1,0,1,0}; int col[4]={0,1,0,-1};void DFS(int x,int y,int sum) {if(x==ex&&y==ey){if(sum<ans)ans=sum;return;}for(int i=0;i<=3;i++){int xx=x+row[i];int yy=y+col[i];if(xx>=0&&xx<m&&yy>=0&&yy<n&&walk[xx][yy]>sum+1&&s[xx][yy]!='#'){walk[xx][yy]=sum+1;DFS(xx,yy,sum+1);}}return; } int main() {cin>>m>>n;memset(walk,0x3f,sizeof(walk));for(int i=0;i<m;i++){for(int j=0;j<n;j++){cin>>s[i][j];if(s[i][j]=='S'){sx=i;sy=j;}if(s[i][j]=='T'){ex=i;ey=j;}}}walk[sx][sy]==0;DFS(sx,sy,0);cout<<ans<<endl;return 0; }

?

BFS
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> #include <queue>using namespace std;const int maxn=100; struct node{int x,y;int step; }S,T,Node;int n,m; char maze[maxn][maxn]; bool inq[maxn][maxn]; int X[4]={0,0,1,-1}; int Y[4]={1,-1,0,0};bool test(int x,int y) {if(x>=n||x<0||y>=m||y<0) return false;if(maze[x][y]=='#'||inq[x][y]==true) return false;return true; }int BFS() {queue<node>q;q.push(S);while(!q.empty()){node top=q.front();q.pop();if(top.x==T.x&&top.y==T.y){return top.step;}for(int i=0;i<4;i++){int newX=top.x+X[i];int newY=top.y+Y[i];if(test(newX,newY)){Node.x=newX;Node.y=newY;Node.step=top.step+1;q.push(Node);inq[newX][newY]=true;}}}return -1; }int main() {scanf("%d%d",&n,&m);for(int i=0;i<n;i++){for(int j=0;j<m;j++){cin>>maze[i][j];}}for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(maze[i][j]=='S'){S.x=i;S.y=j;}if(maze[i][j]=='T'){T.x=i;T.y=j;}}}S.step=0;printf("%d\n",BFS());return 0; }

?

轉載于:https://www.cnblogs.com/Fy1999/p/9011519.html

總結

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

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