求条
查看原帖
求条
971024
Jerry_zpl楼主2024/12/7 11:47
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1005;
struct node
{
	int x,y;
};
int vis[maxn][maxn];
char a[maxn][maxn];
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
int n;
int ans=0;
bool check(int ax,int ay)
{
	if(ax<1)
	{
		return true;
	}
	if(ax>n)
	{
		return true;
	}
	if(ay<1)
	{
		return true;
	} 
	if(ay>n)
	{
		return true;
	}
	if(vis[ax][ay]==true)
	{
		return true;
	}
	if(a[ax][ay]=='.')
	{
		return true;
	}
	return false;
}
void bfs(int posx,int posy)
{
	queue<node>q;
    vis[posx][posy]=true;
    q.push({posx,posy});
    int y=0;
    int cnt=0; 
    while(q.empty()==false)
    {
    	node t=q.front();
    	q.pop();
    	cnt++;
    	int flag=0;
    	for(int i=0;i<4;i++)
    	{
    		int nx=dx[i]+t.x;
    		int ny=dy[i]+t.y;
    		if(a[nx][ny]=='.')
    		{
    			flag++;
			}
    		if(check(nx,ny))
    		{
    			continue;
			}
			vis[nx][ny]=true;
			q.push({nx,ny}); 
		}
		if(flag>0) y++;
	}
	if(cnt==y) ans++;
	
	return ;
}
signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(a[i][j]=='#'&&vis[i][j]==false)
			{
				ans++;
				bfs(i,j);
			} 
		}
	} 
	cout<<ans; 
	return 0;
}
2024/12/7 11:47
加载中...