那个大佬能帮我看一下会RE呀?
查看原帖
那个大佬能帮我看一下会RE呀?
715948
small_lemon_qwq楼主2023/9/28 13:10
#include<bits/stdc++.h>
using namespace std;
int n,m,ans[1505][1505],k;
char mab[1505][1505];
struct node{
	int x;
	int y;
//	{int x,int y):x(x),y(y){;}
};
struct node A,B;
inline bool check(node s,node e){//判断能否从s到e
	int sx=s.x;
	int sy=s.y;
	int ex=e.x;
	int ey=e.y;
	queue<node>q;
	q.push({sx,sy});
	int d[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
	int v[1505][1505]={};
	while(!q.empty()){
		node t=q.front();
		q.pop();
		if(t.x==ex&&t.y==ey){
			return true;
		}
		for(int i=0;i<4;i++){
			int nx=t.x+d[i][0],ny=t.y+d[i][1];
			if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&v[nx][ny]==0&&mab[nx][ny]=='.'){
				q.push({nx,ny});
				v[nx][ny]=1;
			}
		}
	}
	return false;
}
inline bool inside(node x){
	return x.x>=1&&x.x<=n&&x.y>=1&&x.y<=m;
}
inline void dfs(node a,node b){
	ans[b.x][b.y]=1;
	//往右推
	if(!ans[b.x][b.y+1]&&inside({b.x,b.y+1})&&check(a,{b.x,b.y-1})){
		dfs(b,{b.x,b.y+1});
	}
	//往左推
	if(!ans[b.x][b.y-1]&&inside({b.x,b.y-1})&&check(a,{b.x,b.y+1})){
		dfs(b,{b.x,b.y-1});
	}
	//往上推
	if(!ans[b.x-1][b.y]&&inside({b.x-1,b.y})&&check(a,{b.x+1,b.y})){
		dfs(b,{b.x-1,b.y});
	}
	//往下推
	if(!ans[b.x+1][b.y]&&inside({b.x+1,b.y})&&check(a,{b.x-1,b.y})){
		dfs(b,{b.x+1,b.y});
	}
}
int main(){
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>mab[i][j];
			if(mab[i][j]=='A'){
				A.x=i;
				A.y=j;
			}
			if(mab[i][j]=='B'){
				B.x=i;
				B.y=j;
			}
		}
	}
	dfs(A,B);
	while(k--){
		int x,y;
		cin>>x>>y;
		if(ans[x][y]){
			cout<<"YES";
		}else{
			cout<<"NO";
		}
		cout<<"\n";
	}
	return 0;
}
2023/9/28 13:10
加载中...