20分求助!

P2199 最后的迷宫

有错的地方我给你标出来了: ``` #include<bits/stdc++.h> using namespace std; long long n,m,xa[9]={0,-1,0,1,-1,1,-1,0,1},ya[9]={0,-1,-1,-1,0,0,1,1,1},xb[5]={0,-1,1,0,0},yb[5]={0,0,0,-1,1}; long long a,b,c,d,MAP[5005][5005],t,tx,ty; char Map[5005][5005]; queue<long long>xx,yy,sum; long long BFS(long long x,long long y) { if(MAP[x][y]==2)return 0; xx.push(x); yy.push(y); sum.push(0); MAP[x][y]=1;//初始化 while(!xx.empty()) { x=xx.front(); y=yy.front(); for(int i=1;i<=4;i++) { tx=x+xb[i]; ty=y+yb[i]; if(MAP[tx][ty]==2)return sum.front()+1; else if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&Map[tx][ty]=='O'&&MAP[tx][ty]==0) { MAP[tx][ty]=1;//写这里,标记写前面会排到队尾,可能同一个元素入队两次 xx.push(x+xb[i]); yy.push(y+yb[i]); sum.push(sum.front()+1); } } xx.pop(); yy.pop(); sum.pop(); } return -1; } int main() { cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>Map[i][j]; for(;;) { for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) MAP[i][j]=0; while(!xx.empty())xx.pop(); while(!yy.empty())yy.pop(); while(!sum.empty())sum.pop(); cin>>a>>b>>c>>d; if(a==0&&b==0&&c==0&&d==0) break; for(int i=1;i<=8;i++) { for(int x=a,y=b;;x+=xa[i],y+=ya[i]) { if(x<1||x>n||y<1||y>m||Map[x][y]=='X') break; MAP[x][y]=2; } } t=BFS(c,d); if(t==-1)cout<<"Poor Harry\n"; //哈哈,你写的"Poor Harrn" else cout<<t<<"\n"; } return 0; } ``` 不谢
by mons @ 2022-08-22 18:00:01


|