描述
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。
假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。
输入第一行是两个整数n和m(1<=n,m<=100),表示迷宫的行数和列数。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'表示出口。输出输出从起点到出口最少需要走的步数。样例输入
3 3 S#T .#. ...
样例输出
6
1 #include<stdio.h> 2 #include<string.h> 3 int ni[4]={0,1,0,-1}; 4 int nj[4]={1,0,-1,0}; 5 int qu[10001][2],dep[10000]; 6 char a[101][101]; 7 int book[101][101]; 8 int m,n,i,j,k,si,sj,xi,xj,qi,qj,zi,zj,bu=0,ans; 9 int main() 10 { 11 int h,t; 12 scanf("%d%d",&m,&n); 13 memset(book,0,sizeof(book)); 14 for(i=1;i<=m;i++) 15 scanf("%s",a[i]); 16 for(i=1;i<=m;i++) 17 for(j=0;j<=n-1;j++) 18 { 19 if(a[i][j]=='S') {qi=i;qj=j;book[i][j]=1;} 20 if(a[i][j]=='T') {zi=i;zj=j;} 21 } 22 h=0;t=0;ans=-1; 23 memset(dep,0,sizeof(dep)); 24 memset(qu,0,sizeof(qu)); 25 qu[0][0]=qi;qu[0][1]=qj; 26 while(h<=t) 27 { 28 xi=qu[h][0]; 29 xj=qu[h][1]; 30 if(xi==zi&&xj==zj) 31 { 32 ans=dep[h]; 33 break; 34 } 35 for(k=0;k<=3;k++) 36 { 37 si=xi+ni[k]; 38 sj=xj+nj[k]; 39 if(si>=1&&si<=m&&sj>=0&&sj<=n-1) 40 if(a[si][sj]!='#'&&book[si][sj]!=1) 41 { 42 qu[++t][0]=si; 43 qu[t][1]=sj; 44 dep[t]=dep[h]+1; 45 book[si][sj]=1; 46 } 47 } 48 h++; 49 } 50 printf("%d ",ans); 51 return 0; 52 }