求助BFS
查看原帖
求助BFS
561529
Infinite_Energy楼主2022/9/5 16:05
#include<bits/stdc++.h>
using namespace std;
struct node{
	int x;
	int y;
}e[1000010];
int dx[4]={0,-1,0,1};
int dy[4]={-1,0,1,0};
int n,q,head,tail,qx,qy;
int ans[1010][1010],k,sum;
int res[1000010];
char ch[1010][1010];
long long read(){
	char ch=getchar();
	long long sgn=1,x=0;
	while(ch<'0'||ch>'9'){
		if(ch=='-'){
			sgn=-1;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=(x<<3)+(x<<1)+(ch&15);
		ch=getchar();
	}
	return x*sgn;
}
void write(long long n,bool p){
	if(n<0){
		putchar('-');
		n=-n;
	}
	if(n==0){
		if(p==true){
			putchar('0');
		}
		return;
	}
	write(n/10,0);
	putchar(n%10+'0');
}
int main(){
	n=read();
	q=read();
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>ch[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(ans[i][j]!=0){
				continue;
			}
			k++;
			head=1;
			tail=1;
			sum=1;
			e[head].x=i;
			e[head].y=j;
			ans[i][j]=k;
			while(head<=tail){
				for(int l=0;l<4;l++){
					long long xx=dx[l]+e[head].x;
					long long yy=dy[l]+e[head].y;
					if(ans[i][j]==0){
						if(xx>=1&&xx<=n&&yy>=1&&yy<=n){
							if((ch[xx][yy]=='0'&&ch[e[head].x][e[head].y]=='1')||
							(ch[xx][yy]=='1'&&ch[e[head].x][e[head].y]=='0')){
								tail++;
								sum++;
								ans[xx][yy]=k;
								e[tail].x=xx;
								e[tail].y=yy;
							}
						}
					}
				}
				head++;
			}
			res[k]=sum;
		}
	}
	for(int i=1;i<=q;i++){
		qx=read();
		qy=read();
		printf("%lld\n",res[ans[qx][qy]]);
	}
	return 0;
}


样例:输出1 1

2022/9/5 16:05
加载中...