题目描述:
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。
假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。
输入描述
第一行是两个整数n和m(1≤n,m≤100),表示迷宫的行数和列数。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符‘.’表示空地,‘#’表示墙,‘S’表示起点,‘T’表示出口。
输出描述
输出从起点到出口最少需要走的步数。
用例输入 1
3 3 S#T .#. ...
用例输出 1
6
我的代码如下:
#include<bits/stdc++.h>
using namespace std;
char x[101][101];
int dl[10001][3]={};
int xx[5]={0,1,-1,0,0};
int yy[5]={0,0,0,1,-1};
int main(){
int m,n,a,b,c,d,s=0;
cin>>m>>n;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin>>x[i][j];
if(x[i][j]=='S'){
a=i;
b=j;
}
if(x[i][j]=='T'){
c=i;
d=j;
}
}
}
dl[1][0]=a;
dl[1][1]=b;
dl[1][2]=0;
int y1=a,y2=b;
for(int begin=1,end=1;begin<=end;begin++){
for(int i=1;i<=4;i++){
if(y1==c&&y2==d){
cout<<dl[end][2];
return 0;
}
y1=dl[begin][0]+xx[i];
y2=dl[begin][1]+yy[i];
if(x[y1][y2]=='.'||x[y1][y2]=='T'){
x[y1][y2]='#';
end++;
dl[end][0]=y1;
dl[end][1]=y2;
dl[end][2]=dl[begin][2]+1;
}
}
}
return 0;
}