搜索的部分好像卡住了
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1005][1005];
const int d[8][2]={{-1,-1},{-1,0},{1,1},{0,1},{1,1},{1,0},{-1,1},{0,-1}};
int ans=0;
inline int read()
{
int x=0,y=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') y=-1;c=getchar();}
while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
return x*y;
}
void dfs(int i,int j)
{
if(a[i][j]==2)
{
a[i][j]=3;return;
}
if(a[i][j]==0)
{
a[i][j]=4;
for(int k =0;k<=7;i++)
{
dfs(i+d[k][0],j+d[k][1]);
}
}
}
int main()
{
n=read();m=read();
for(int i =1;i<=n;i++)
for(int j =1;j<=m;j++)
a[i][j]=read();
for(int i =1;i<=n;i++)
for(int j =1;j<=m;j++)
{
if(a[i][j]==1)
{
for(int k =0;k<=7;k++)
{
a[i+d[k][0]][j+d[k][1]] = 2;
}
}
}
for(int i =1;i<=n;i++)
for(int j =1;j<=m;j++)
{
if(a[i][j]==0)
{
ans++;
dfs(i,j);
}
}
for(int i =1;i<=n;i++)
for(int j =1;j<=m;j++)
{
if(a[i][j]==2) ans++;
}
printf("%d",ans);
return 0;
}