p1141爆零 蒟蒻求助!(bfs)
  • 板块P1141 01迷宫
  • 楼主ST_jz_xpj
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/9/12 19:58
  • 上次更新2024/9/12 22:41:57
查看原帖
p1141爆零 蒟蒻求助!(bfs)
1378388
ST_jz_xpj楼主2024/9/12 19:58
#include<iostream>
#include<queue>
using namespace std;
int n,m,a,b;int q4[1002][1002]={0};int num[100000]={0};
int q1[1002][1002]={0};bool q2[1002][1002]={0};
queue<int> x;
queue<int> y;
void bfs(int i,int j,int now){
	if(q2[i][j]!=1){
		q4[i][j]=now;
		num[now]++;
		
		if(q1[i][j]==0){
			if(q1[i+1][j]==1&&i+1<n+1)	{x.push(i+1);y.push(j);}
			if(q1[i-1][j]==1&&i-1>0)	{x.push(i-1);y.push(j);}
			if(q1[i][j+1]==1&&j+1<n+1)	{x.push(i);y.push(j+1);}
			if(q1[i][j-1]==1&&j-1>0)	{x.push(i);y.push(j-1);}
		}
		if(q1[i][j]==1){
			if(q1[i+1][j]==0&&i+1<n+1)	{x.push(i+1);y.push(j);}
			if(q1[i-1][j]==0&&i-1>0)	{x.push(i-1);y.push(j);}
			if(q1[i][j+1]==0&&j+1<n+1)	{x.push(i);y.push(j+1);}
			if(q1[i][j-1]==0&&j-1>0)	{x.push(i);y.push(j-1);}
		}
	}
	q2[i][j]=1;
	x.pop();y.pop();
	if(!x.empty())bfs(x.front(),y.front(),now);
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)scanf("%1d",&q1[i][j]);
	}
	int now=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(q2[i][j]!=1){
				x.push(i);y.push(j);
				bfs(x.front(),y.front(),now);
				now++;
			}
		}
	}
	for(int i=0;i<m;i++){
		cin>>a>>b;
		cout<<q4[a][b]<<endl;
		}
	}
	return 0;
}

悬关QAQ!

2024/9/12 19:58
加载中...