社区讨论
哪儿错了(互关求助)
P2199最后的迷宫参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mk1002s8
- 此快照首次捕获于
- 2026/01/05 18:08 上个月
- 此快照最后确认于
- 2026/01/08 23:55 上个月
CPP
#include<bits/stdc++.h>
#define ll long long
#define un unsigned
#define int long long
#define db double
#define inf 1000000000000000
#define st string
#define ct const
#define xh(a,b,c) for(int a=b;a<=c;a++)
#define wx while(1)
#define dn(a,b,c) for(int a=b;a>=c;a--)
using namespace std;
inline int read(){
register int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();
return s*w;
}
const int N=16384;
int n,m;
struct node{
int x,y,ans;
};
char a[N][N];
bool vis[N][N];
int f[4];
int tx[]={0,0,-1,1};
int ty[]={-1,1,0,0};
int dx[]={0,0,-1,1,1,-1,1,-1};
int dy[]={-1,1,0,0,1,-1,-1,1};
bool check(int a1,int b1,int a2,int b2){
if(a1==a2&&b1==b2)return 1;
xh(i,0,7){
int X=a1+dx[i],Y=b1+dy[i];
if(X==a2&&Y==b2)return 1;
}
return 0;
}
void bfs(int a1,int b1,int a2,int b2){
queue<node> q;
q.push({a1,b1,0});
vis[a1][b1]=1;
while(!q.empty()){
node k=q.front();
q.pop();
if(check(k.x,k.y,a2,b2)){
cout<<k.ans<<"\n";
return ;
}
xh(i,0,3){
int X=k.x+tx[i],Y=k.y+ty[i];
if(!vis[X][Y]&&X>0&&X<=n&&Y>0&&Y<=m&&a[X][Y]!='X')q.push({X,Y,k.ans+1}),vis[X][Y]=1;
}
}
cout<<"Poor Harry\n";
return ;
}
signed main(){
cin>>n>>m;
xh(i,1,n)xh(j,1,m)cin>>a[i][j];
while(1){
xh(i,0,3)cin>>f[i];
xh(i,1,n)xh(j,1,m)vis[i][j]=0;
if(!f[0]&&!f[1]&&!f[2]&&!f[3])break;
bfs(f[0],f[1],f[2],f[3]);
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...