1254:走出迷宫
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 2605 通过数: 1202
【题目描述】
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。
假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。
【输入】
第一行是两个整数n和m(1≤n,m≤100),表示迷宫的行数和列数。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符‘.’表示空地,‘#’表示墙,‘S’表示起点,‘T’表示出口。
【输出】
输出从起点到出口最少需要走的步数。
【输入样例】
3 3 S#T .#. ...
【输出样例】
6
【来源】
这道题目用BFS做。
1 #include<cstdio> 2 #include<iostream> 3 #include<queue> //队列 4 using namespace std; 5 int next[4][2]={{1,0},{-1,0},{0,-1},{0,1}}; //控制方向 6 int n,m,i,j,ex,ey,sx,sy,minn=999999; 7 char s[500][500]; //迷宫 8 struct node{ 9 int x,y,stop; 10 }; 11 int bfs(int a,int b) 12 { 13 queue<node>q;int k; 14 node q1; 15 q1.x=a; 16 q1.y=b; 17 q1.stop=0; 18 q.push(q1); 19 while(!q.empty()) 20 { 21 node q2=q.front(); 22 for(k=0;k<4;k++) 23 { 24 int xx=q2.x+next[k][0]; 25 int yy=q2.y+next[k][1]; 26 if(xx>=0&&xx<n&&yy>=0&&yy<m&&s[xx][yy]!='#') 27 { 28 node q3;s[xx][yy]='#'; 29 q3.x=xx;q3.y=yy;q3.stop=q2.stop+1; 30 if(xx==ex&&yy==ey) 31 { 32 if(q3.stop<minn) 33 minn=q3.stop; 34 } 35 else 36 { 37 38 q.push(q3); 39 } 40 } 41 } 42 q.pop(); 43 } 44 } 45 int main() 46 { 47 scanf("%d%d",&n,&m); 48 for(i=0;i<n;i++) 49 scanf("%s",s[i]); 50 for(i=0;i<n;i++) 51 for(j=0;j<m;j++) 52 { 53 if(s[i][j]=='S') 54 { 55 sx=i;sy=j; 56 s[i][j]=='.'; 57 } 58 if(s[i][j]=='T') 59 { 60 ex=i;ey=j; 61 s[i][j]=='.'; 62 } 63 } 64 bfs(sx,sy); 65 printf("%d",minn); 66 return 0; 67 }
来源:https://www.cnblogs.com/fuxiqi/p/10780289.html