社区讨论

24分球掉

P2199最后的迷宫参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mkayfbop
此快照首次捕获于
2026/01/12 17:22
上个月
此快照最后确认于
2026/01/16 16: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];
		while(X<=n&&Y<=m&&X>0&&Y>0&&a[X][Y]!='X'){
			if(X==a2&&Y==b2)return 1;
			X+=dx[i],Y+=dy[i];
		} 
	}
	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;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...