求助bfs
  • 板块灌水区
  • 楼主唯有谔谔
  • 当前回复13
  • 已保存回复13
  • 发布时间2022/7/27 16:22
  • 上次更新2023/10/27 18:09:30
查看原帖
求助bfs
158821
唯有谔谔楼主2022/7/27 16:22

P1141

#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
queue <int> qx;
queue <int> qy;
int n,m;
bool map[1001][1001],vi[1001][1001];
int x,y;
int dx[5]={0,1,0,0,-1};
int dy[5]={0,0,1,-1,0};
int s=1;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
    	for(int j=1;j<=n;j++)
    	{
    		scanf("%d",&map[i][j]);
		}
	}
	for(int x=1;x<=m;x++)
	{
		scanf("%d",&x,&y);
		qx.push(x);
		qy.push(y);
		vi[x][y]=false;
		while((!qx.empty())&&(!qy.empty()))
		{
			int x1=qx.front();
			int x2=qy.front();
			for(int i=1;i<=4;i++)
			{
				int xx=x1+dx[i];
				int yy=x2+dy[i];
				if(map[xx][yy]==(!map[x1][x2])&&xx>0&&xx<=n&&yy>0&&yy<=n&&vi[xx][yy]==true)
				{
					s++;
					qx.push(xx);
					qy.push(yy);
					vi[xx][yy]=false;
				}
			}
			qx.pop();
			qy.pop();
		}
		cout<<s<<endl;
		s=0;
		for(int i=0;i<=1001;i++)
		{
			for(int j=0;j<=1001;j++)
			{
				vi[i][j]=true;
			}
		}
	}
	return 0;
}

样例都没过

2022/7/27 16:22
加载中...