关于程序
  • 板块灌水区
  • 楼主OneLeft
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/12/18 21:23
  • 上次更新2023/10/24 07:16:12
查看原帖
关于程序
574215
OneLeft楼主2022/12/18 21:23
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=1e4+5;
int n,m,a[MAXN][MAXN],b[MAXN][MAXN],c[MAXN][MAXN],sum;
int bx[9]={0,-1,0,1,-1,1,-1,0,1};
int by[9]={0,-1,-1,-1,0,0,1,1,1};
bool check(int x,int y,int z)
{
	if(z==1)return a[x-1][y-1]!=1&a[x-1][y]!=1&a[x-1][y+1]!=1&a[x][y-1]!=1&a[x][y+1]!=1&a[x+1][y-1]!=1&a[x+1][y]!=1&a[x+1][y+1]!=1;
	if(z==2)return c[x-1][y-1]!=1&c[x-1][y]!=1&c[x-1][y+1]!=1&c[x][y-1]!=1&c[x][y+1]!=1&c[x+1][y-1]!=1&c[x+1][y]!=1&c[x+1][y+1]!=1;
}
void dfs(int x,int y)
{
	if(x>=1&&x<=n&&y>=1&&y<=m&&b[x][y]==0&&c[x][y]==1)
	{
		b[x][y]=1;
		for(int i=1;i<=8;i++)dfs(x+bx[i],y+by[i]);
	}
}
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++)
		cin>>a[i][j];
	for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++)
		if(check(i,j,1)==1&&a[i][j]==0&&c[i][j]==0)c[i][j]=1;
	for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++)
	{
		if(a[i][j]==0&&c[i][j]==0&&b[i][j]==0)
		{
			b[i][j]=1;
			if(check(i,j,2)==false)sum++;
		}
	}
	for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++)
	{
		if(c[i][j]==1&&b[i][j]==0)
		{
			sum++;
			dfs(i,j);
		}
	}
	cout<<sum;
	return 0;
}

为啥运行不了QWQ

2022/12/18 21:23
加载中...