#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