蒟蒻求助
  • 板块P1162 填涂颜色
  • 楼主GRjun
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/7/27 21:21
  • 上次更新2023/11/4 13:06:24
查看原帖
蒟蒻求助
400642
GRjun楼主2021/7/27 21:21
#include<bits/stdc++.h>
using namespace std;
int a[31][31],flag=0,n,s=0; 
bool b[31][31];
int q[1000][3];
int head,tail;
int x2[901],y2[901];
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
void bfs(int sx,int sy)
{
	flag=0;
	q[1][1]=sx;
	q[1][2]=sy;
	x2[s]=sx;
	y2[s]=sy;
	head=0,tail=1,s=1;
	b[sx][sy]=1;
	while(head!=tail)
	{
		head++;
		int x=q[head][1],y=q[head][2];
		for(int i=0;i<4;i++)
		{
			int xx=x+dx[i],yy=y+dy[i];
			if((xx==1||xx==10||yy==1||yy==10)&&a[xx][yy]==0)
			   flag=1;	
			if(xx>1&&yy>1&&xx<10&&yy<10&&b[xx][yy]==0&&a[xx][yy]==0)
			{   
			    b[xx][yy]=1;
				tail++;
				s++;
				q[tail][1]=xx;
				q[tail][2]=yy;
				x2[s]=xx;
				y2[s]=yy;
			}
		}
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i=2;i<=n;i++)
	{
		for(int j=2;j<=n;j++)
		{
			if(a[i][j]==0&&b[i][j]==0)
			{
			  bfs(i,j);
			  if(flag==0)
			  {
			  	for(int i=1;i<=s;i++)
			  	a[x2[i]][y2[i]]=2;
			  }
			}
		}
	}
    for(int i=1;i<=n;i++)
    {
    	for(int j=1;j<=n;j++)
          cout<<a[i][j]<<" ";
        cout<<endl;
	}
	return 0;
}
2021/7/27 21:21
加载中...