白书。。。
#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; }