白书。。。
#include<bits/stdc++.h>
using namespace std;
char maze[12][12];
int n,m;
int sx,sy,ex,ey,d[12][12];
int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};
typedef pair<int,int> P;
int bfs()
{
queue<P> que;
memset(d,-1,sizeof(d));
que.push(P(sx,sy));
d[sx][sy]=0;
while(que.size())
{
P p= que.front();
que.pop();
if(p.first==ex&&p.second==ey)
break;
for(int 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&&maze[nx][ny]!='#'&&d[nx][ny]==-1)
{
que.push(P(nx,ny));
d[nx][ny]=d[p.first][p.second]+1;
}
}
}
return d[ex][ey];
}
int main()
{
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%s",&maze[i]);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(maze[i][j]=='S')
{
sx=i;sy=j;
}
if(maze[i][j]=='G')
{
ex=i;ey=j;
}
}
}
int ans=bfs();
printf("%d\n",ans);
return 0;
}