BFS求调玄关
查看原帖
BFS求调玄关
1279637
lichenxi123楼主2025/6/20 18:24
#include<bits/stdc++.h>
using namespace std;
int n,a,b,m,mg[1010][1010],dx[7]={0,0,-1,1},dy[7]={-1,1,0,0},ans[1010][1010];
char mg1[1010][1010];
struct node{
	int x,y;
}u,c[1010];
queue<node>q;//队列; 
bool v[1010][1010];//标记; 
void bfs(){
	q.push(node{a,b});
	int t=1;
	c[t]=q.front();
	while(!q.empty()){
		q.pop();
		for(int i=0;i<=3;i++){
			u.y=dy[i]+q.front().y;
			u.x=dx[i]+q.front().x;
			if(u.x<=n&&u.x>0&&u.y<=n&&u.y>0&&v[u.x][u.y]==0&&mg[u.x][u.y]^mg[q.front().x][q.front().y]){
				t++;                 
				c[t]=u;
				q.push(node{u.x,u.y});
				v[u.x][u.y]=1;
			}
		}
	}
	for(int i=1;i<=t;i++){
        ans[c[i].x][c[i].y]=t;
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>mg1[i][j];
			mg[i][j]=mg1[i][j]-'0';
		}
	}
	for(int kkk=1;kkk<=m;kkk++){
		cin>>a>>b;
		if(v[a][b]==0){
			bfs();
			cout<<ans[a][b]<<endl;              
		}             
		else{                     
			cout<<ans[a][b]<<endl;
		}
	}
	return 0;
}

求调真的改了好久T-T 参考题解

2025/6/20 18:24
加载中...