1 solutions
-
0
#include #include #include<math.h> #include #include #include using namespace std;
struct STU { int xx; int yy; };
queue q; int go[5][2]={{0,0},{1,0},{-1,0},{0,1},{0,-1}}; int val[1600][1600]; int mapp1[1600][1600];//记录墙壁坐标 int mapp2[1600][1600];//记录已走点坐标 int step[1600][1600]; int flag,n,m,ex,ey,bx,by,tx,ty,qx,qy,ans; char a;
int win(int x,int y)//判断可不可以用“飞来咒”直接拿到奖杯 { if(xex&&yey)//奖杯和哈利重合 { return 1; }
if(x==ex)//在同一水平直线上 { for(int i=min(y,ey);i<=max(y,ey);i++) { if(mapp1[x][i]==1) return 0; } return 1; } if(y==ey)//在同一竖直直线上 { for(int i=min(x,ex);i<=max(x,ex);i++) { if(mapp1[i][y]==1) return 0; } return 1; } if(x-y==ex-ey)//在同一方向为东北——西南的直线上 { for(int i=1;i<=abs(ex-x);i++) { if(x<ex) { if(mapp1[x+i][y+i]==1) return 0; } else { if(mapp1[x-i][y-i]==1) return 0; } } return 1; } if(x+y==ex+ey)//在同一方向为西北——东南的直线上 { for(int i=1;i<=abs(x-ex);i++) { if(x<ex) { if(mapp1[x+i][y-i]==1) return 0; } else { if(mapp1[x-i][y+i]==1) return 0; } } return 1; } return 0;//啥都不符合。。。
}
int bfs(int x,int y)//正常广度优先搜索 { q.push((STU){x,y}); mapp2[x][y]=1; step[x][y]=0;
while(q.size()!=0) { qx=q.front().xx; qy=q.front().yy; q.pop(); if(win(qx,qy)==1)//能拿到就结束 { return step[qx][qy]; } for(int i=1;i<=4;i++) { tx=qx+go[i][0]; ty=qy+go[i][1]; if(tx<1||ty<1||tx>n||ty>m||mapp2[tx][ty]==1) { continue; } mapp2[tx][ty]=1; step[tx][ty]=step[qx][qy]+1; q.push((STU){tx,ty}); } } return -1;//拿不到打个标记
}
int main(void) { scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>a; if(a=='X') val[i][j]=1;//标记墙壁,之后每一遍输入均可使用 } } for( ; ; ) { scanf("%d%d%d%d",&ex,&ey,&bx,&by); if(bx==0&&by==0&&ex==0&&ey==0) { break; } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { mapp2[i][j]=mapp1[i][j]=val[i][j];//走过的也把墙壁标记为已走路径,不再经过 } } ans=bfs(bx,by); if(ans==-1) { printf("Poor Harry\n"); } else { printf("%d\n",ans); } memset(step,0,sizeof(step));//切记初始化 memset(mapp1,0,sizeof(mapp1)); memset(mapp2,0,sizeof(mapp2)); while(q.size()!=0)//队列初始化 { q.pop(); } } return 0;
}
- 1
Information
- ID
- 1173
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 3
- Tags
- # Submissions
- 4
- Accepted
- 0
- Uploaded By