错误代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,dx[8]={-1,0,0,1,-1,-1,1,1},dy[8]={0,-1,1,0,-1,1,-1,1};
int fx,fy,ex,ey,ans;
struct node{
int x,y,step;
};
int main(){
cin>>n>>m;
bool t[n+2][m+2],vis[n+2][m+2];
int mp[n+2][m+2];
memset(t,0,sizeof(t));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char c;
cin>>c;
if(c=='O'){
t[i][j]=1;
}
else{
t[i][j]=0;
}
}
}
while(1){
cin>>ex>>ey>>fx>>fy;
if(fx==0){
break;
}
ans=-1;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
mp[i][j]=t[i][j];
}
}
mp[ex][ey]=2;
for(int i=0;i<8;i++){
int xx=ex,yy=ey;
while(t[xx+dx[i]][yy+dy[i]]==1){
mp[xx+dx[i]][yy+dy[i]]=2;
xx+=dx[i];
yy+=dy[i];
}
}
queue<node> q;
q.push({fx,fy,0});
vis[fx][fy]=1;
while(!q.empty()){
node p=q.front();
q.pop();
if(mp[p.x][p.y]==2){
ans=p.step;
break;
}
for(int i=0;i<4;i++){
int xx=p.x+dx[i],yy=p.y+dy[i];
if(mp[xx][yy]!=0&&!vis[xx][yy]){
vis[xx][yy]=1;
q.push({xx,yy,p.step+1});
}
}
}
if(ans!=-1){
cout<<ans<<endl;
}
else{
cout<<"Poor Harry"<<endl;
}
}
return 0;
}