小C最近在研究机器人,他想看看自己的机器人够不够智能,于是他将机器人放在一个n*m的迷宫中,看看机器人能不能在最短的时间内到达目的地,可是小C不知道最短的时间是多少,现在请你帮他算算机器人到达目的地的最短时间是多少?
输入数据第一行两个整数n和m。
接下来n行,每行m个元素,表示迷宫的每个方格。
'S'表示机器人的出发点,
'T'表示目的地,
'#'表示该方格不能通过
'.'表示可以通过
输出一个整数表示机器人到达目的地的最短时间,如果机器人不能到达目的地,输出-1。
S..
##.
.T.
#include<bits/stdc++.h>
using namespace std;
int sx,sy,tx,ty;
typedef pair<int,int>P;
char maze[1005][1005];
int n,m,flag=0,ans=inf,d;
int vis[1005][1005];
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
void dfs(int sx,int sy,int d){
if(sx==tx&&sy==ty){
flag=1;
ans=min(ans,d);
return ;
}
for(int i=0;i<4;i++){
int nx=sx+dx[i];
int ny=sy+dy[i];
if(nx<0||nx==n||ny<0||ny==m)
continue;
if(maze[nx][ny]!='#'&&vis[nx][ny]==0){
vis[nx][ny]=1;
dfs(nx,ny,d+1);
vis[nx][ny]=0;
}
}
return ;
}
int main()
{
int i,j;
cin>>n>>m;
for(i=0;i<n;i++){
cin>>maze[i];
}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(maze[i][j]=='S'){
sx=i;
sy=j;
}
if(maze[i][j]=='T'){
tx=i;
ty=j;
}
}
}
vis[sx][sy]=1;
dfs(sx,sy,0);
if(flag)
cout<<ans<<endl;
else
cout<<"-1"<<endl;
return 0;
}