题目描述
样例输入
10 10
#S######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#...G#
样例输出
22
代码
#include <iostream>
#include <queue>
#include <cstdio>
using namespace std;
const int INF = 100000000;
const int max_m = 100,max_n = 100;
typedef pair<int,int>P;
int N,M;
int sx,sy,gx,gy,i,j;
char f[max_n+1][max_m+1];
int d[max_n+1][max_m+1];
int dx[4] = {1,0,-1,0},dy[4] = {0,1,0,-1};
int bfs()
{
queue<P>que;
for(i = 0;i<N;i++)
{
for(j = 0;j<M;j++)
{
d[i][j] = INF;
}
}
que.push(P(sx,sy));
d[sx][sy] = 0;
while(que.size())
{
P p = que.front();
que.pop();
if(p.first == gx&&p.second == gy)
break;
for(i = 0;i<4;i++)
{
int nx = p.first+dx[i],ny = p.second+dy[i];
if(nx>=0&&nx<N&&ny>=0&&ny<M&&d[nx][ny]==INF&&f[nx][ny]!='#')
{
que.push(P(nx,ny));
d[nx][ny] = d[p.first][p.second]+1;
}
}
}
return d[gx][gy];
}
int main()
{
scanf("%d%d",&N,&M);
for(i = 0;i<N;i++)
{
getchar();
for(j = 0;j<M;j++)
{
scanf("%c",&f[i][j]);
if(f[i][j]=='S')
sx = i,sy = j;
if(f[i][j]=='G')
gx = i,gy = j;
}
}
int res = bfs();
printf("%d\n",res);
return 0;
}