计蒜客 走迷宫2
解析
bfs模板题,但是要注意边界和下走的的点是否合法的判断。
#include<bits/stdc++.h> using namespace std; char mp[1001][1001]; int record[1001][1001]; int changey[5]={0,1,0,-1,0}; int changex[5]={0,0,1,0,-1};//方向 queue<int> xx,yy; int main() { int n,m; cin>>n >>m; int endx,endy; int beginx,beginy;//分别记录起点,终点 for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>mp[i][j];//S起点 T终点 #墙 .草(路) if(mp[i][j]=='S') { xx.push(i); beginx=i; yy.push(j); beginy=j; } if(mp[i][j]=='T') { endx=i; endy=j; } } } while(!xx.empty()&&!yy.empty()) { int nowx=xx.front(); int nowy=yy.front(); xx.pop(); yy.pop(); int newx,newy; for(int i=1;i<=4;i++) { newx=nowx+changex[i]; newy=nowy+changey[i]; if(newx<1||newx>n) continue; if(newy<1||newy>m) continue;//超出地图 if(mp[newx][newy]=='#') continue;//墙 if(newx==beginx&&newy==beginy) continue;//不是起点(起点也是0所以要特判) if(record[newx][newy]!=0) continue;//已经走过 record[newx][newy]=record[nowx][nowy]+1;//从上一个点+1; xx.push(newx); yy.push(newy); } } if(record[endx][endy]==0) cout<<"-1"<<endl; else cout<<record[endx][endy]<<endl; return 0; }