- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。
假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。 - 输入
- 第一行是两个整数n和m(1<=n,m<=100),表示迷宫的行数和列数。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'表示出口。 - 输出
- 输出从起点到出口最少需要走的步数。
- 样例输入
-
3 3 S#T .#. ...
- 样例输出
-
6
bfs
屠龙宝刀点击就送#include <iostream> #include <cstdlib> using namespace std; int ax[4]={0,0,1,-1},ay[4]={1,-1,0,0},a,b,c,d,i,j,n,m; char mg[101][101]; int print(int p) { cout<<p<<endl; exit(0); } int ss() { int head=0,tail=1,x,y,f[100*100][4]; f[tail][1]=a; f[tail][2]=b; f[tail][3]=1; mg[a][b]='#'; do{ head++; for(i=0;i<4;++i) { x=f[head][1]+ax[i];y=f[head][2]+ay[i]; if(x>=0&&x<m&&y>=0&&y<n&&mg[x][y]=='.') { tail++; f[tail][1]=x; f[tail][2]=y; f[tail][3]=f[head][3]+1; mg[x][y]='#'; if(x==c&&y==d) { print(f[head][3]); break; } } } }while(head<tail); } int main() { cin>>n>>m; for(i=0;i<n;++i) { for(j=0;j<m;++j) { cin>>mg[i][j]; if(mg[i][j]=='S') { a=i; b=j; mg[i][j]='.'; } if(mg[i][j]=='T') { c=i; d=j; mg[i][j]='.'; } } } ss(); return 0; }