社区讨论
玄关求调p2199
P2199最后的迷宫参与者 1已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mhjtiqyp
- 此快照首次捕获于
- 2025/11/04 08:15 4 个月前
- 此快照最后确认于
- 2025/11/04 08:15 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=2e4+5;
int n,m,fx,fy,ex,ey,dx[8]={-1,0,0,1,-1,-1,1,1},dy[8]={0,-1,1,0,-1,1,-1,1},ans;
char mp[N];
bool bj[N],vis[N];
struct node{
int x,y,sv;
};
int id(int x,int y){
return (x-1)*m+y;
}
void init(int x,int y){
bj[id(x,y)]=1;
for(int i=0;i<8;i++){
int tx=x,ty=y;
while(mp[id(tx+dx[i],ty+dy[i])]=='O'){
bj[id(tx+dx[i],ty+dy[i])]=1;
tx+=dx[i],ty+=dy[i];
}
}
}
bool bfs(int x,int y){
queue<node> q;
q.push({x,y,0});
vis[id(x,y)]=1;
while(!q.empty()){
node p=q.front();
q.pop();
if(bj[id(p.x,p.y)]){
ans=p.sv;
return true;
}
for(int i=0;i<4;i++){
int xx=p.x+dx[i],yy=p.y+dy[i];
int t=id(xx,yy);
if(!vis[t]&&mp[t]=='O'){
vis[t]=1;
q.push({xx,yy,p.sv+1});
}
}
}
return false;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n*m;i++){
cin>>mp[i];
}
while(1){
memset(bj,0,sizeof(bj));
memset(vis,0,sizeof(vis));
cin>>ex>>ey>>fx>>fy;
if(fx==0){
break;
}
init(ex,ey);
if(bfs(fx,fy)){
cout<<ans<<endl;
}
else{
cout<<"Poor Harry"<<endl;
}
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...