70分求助!!!

P2199 最后的迷宫

AC: ```cpp // https://www.luogu.com.cn/discuss/588777 #include <bits/stdc++.h> using namespace std; int n,m,x,y,xx,yy,vis[420][420],flag=1; char mapp[320][320],mapp2[320][320]; int wx[8]={1,0,0,-1,1,1,-1,-1}; int wy[8]={0,1,-1,0,1,-1,1,-1}; struct nod{ int x,y,t; }; queue<nod>q; int dx[4]={1,0,0,-1}; int dy[4]={0,1,-1,0}; int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>mapp[i][j]; mapp2[i][j]=mapp[i][j]; } } while(1){ cin>>x>>y>>xx>>yy; if(x==0&&y==0&&xx==0&&yy==0){ return 0; } mapp2[x][y] = '#'; // 这里! for(int i=0;i<8;i++){ int nx=x+wx[i]; int ny=y+wy[i]; while(mapp[nx][ny]!='X'&&nx>=1&&nx<=n&&ny>=1&&ny<=m){ mapp2[nx][ny]='#'; nx+=wx[i]; ny+=wy[i]; } } nod begin; begin.x=xx; begin.y=yy; begin.t=0; vis[xx][yy]=1; q.push(begin); if(mapp2[xx][yy] == '#'){ // 这里! flag = 0; cout << 0 << endl; } else while(q.empty()==0){ nod now=q.front(); q.pop(); for(int i=0;i<4;i++){ nod nxt; nxt.x=now.x+dx[i]; nxt.y=now.y+dy[i]; nxt.t=now.t+1; if(nxt.x>=1&&nxt.x<=n&&nxt.y>=1&&nxt.y<=m&&vis[nxt.x][nxt.y]==0&&mapp[nxt.x][nxt.y]!='X'){ if(mapp2[nxt.x][nxt.y]=='#'){ cout<<nxt.t<<endl; flag=0; break; } q.push(nxt); vis[nxt.x][nxt.y]=1; } } if(flag==0){ break; } } if(flag){ cout<<"Poor Harry"<<endl; } flag=1; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ vis[i][j]=0; } } while(q.empty()==0){ q.pop(); } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ mapp2[i][j]=mapp[i][j]; } } } return 0; } ```
by x383494 @ 2023-03-26 10:53:18


感谢,受教了
by zhangchengyi356535 @ 2023-03-26 10:58:52


|