2 条题解
-
-3
using namespace std; int n,m,qi,qj,zi,zj,dx[]={0,1,0,-1,1,1,-1,-1},dy[]={1,0,-1,0,1,-1,1,-1},dist[1010][1010]; bool a[1010][1010]; char c[1010][1010]; int bfs() { memset(a,0,sizeof a); memset(dist,0x3f,sizeof dist); queue<pair<int,int> >q; q.push({qi,qj}); a[qi][qj]=1; dist[qi][qj]=0; while(!q.empty()) { int x=q.front().first,y=q.front().second; q.pop(); for(int i=0;i<8;i++) { int xx=x,yy=y; while(c[xx][yy]=='O') { xx+=dx[i]; yy+=dy[i]; if(xx==zi&&yy==zj)return dist[x][y]; } } for(int i=0;i<4;i++) { int xx=x+dx[i],yy=y+dy[i]; if(c[xx][yy]=='O') { if(dist[xx][yy]>dist[x][y]+1)dist[xx][yy]=dist[x][y]+1; if(!a[xx][yy]) { a[xx][yy]=1; q.push({xx,yy}); } } } } return -1; } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++)cin>>c[i][j]; } while(cin>>zi>>zj>>qi>>qj,qi||qj) { int s=bfs(); if(s==-1)cout<<"Impossible!\n"; else cout<<s<<'\n'; } return 0; }
- 1
信息
- ID
- 582
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 164
- 已通过
- 43
- 上传者