计蒜客习题:走迷宫2
题目
样例
代码
#include<iostream>
#include<queue>
using namespace std;
int v[105][105],num[105][105],n,m,xx[7]={0,0,-1,1},yy[7]={1,-1,0,0};
char map[105][105];
struct point
{
int x, y;
point(int xx,int yy)
{
x=xx;
y=yy;
}
};
void bfs(int sx,int sy)
{
queue<point> q;
q.push(point(sx,sy));
v[sx][sy]=1;
while(!q.empty())
{
int x=q.front().x;
int y=q.front().y;
q.pop();
for(int i=0;i<4;i++)
{
int tx=x+xx[i];
int ty=y+yy[i];
if(tx<1||tx>n||ty<1||ty>m) continue;
if(!v[tx][ty]&&map[tx][ty]!='#')
{
v[tx][ty]=1;
num[tx][ty]=num[x][y]+1;
if(map[tx][ty]=='T') return;
q.push(point(tx, ty));
}
}
}
return;
}
int main()
{
int sx,sy,ex,ey;
cin>>n>>m;
getchar();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>map[i][j];
if(map[i][j]=='S') {sx=i;sy=j;}
if(map[i][j]=='T') {ex=i;ey=j;}
}
bfs(sx,sy);
if(num[ex][ey]) cout<<num[ex][ey];
else cout<<"-1";
return 0;
}