1 条题解
-
0
思路
至200x200网格单位时间最短路,不可达输出oop!。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; int main(){int t;cin>>t;while(t--){int r,c;cin>>r>>c;vector<string>a(r);queue<pair<int,int>>q;vector<vector<int>>d(r,vector<int>(c,-1));for(int i=0;i<r;i++){cin>>a[i];for(int j=0;j<c;j++)if(a[i][j]=='S'){q.push({i,j});d[i][j]=0;}}int ans=-1,dx[]={1,-1,0,0},dy[]={0,0,1,-1};while(!q.empty()){auto p=q.front();q.pop();if(a[p.first][p.second]=='E'){ans=d[p.first][p.second];break;}for(int k=0;k<4;k++){int x=p.first+dx[k],y=p.second+dy[k];if(x>=0&&x<r&&y>=0&&y<c&&a[x][y]!='#'&&d[x][y]<0){d[x][y]=d[p.first][p.second]+1;q.push({x,y});}}}if(ans<0)cout<<"oop!\n";else cout<<ans<<'\n';}}
- 1