请教这道题为什么错了
1、编程计算由“*”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目。如下图所示,在10*10的二维数组中,有“*”围住了15个点,因此面积为15。0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 0 0 0
0 0 0 0 1 0 0 1 0 0
0 0 0 0 0 1 0 0 1 0
0 0 1 0 0 0 1 0 1 0
0 1 0 1 0 1 0 0 1 0
0 1 0 0 1 1 0 1 1 0
0 0 1 0 0 0 0 1 0 0
0 0 0 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0
下面是我的程序,结果是0,我明明是从四条边线向上下左右四个方向搜索的,遇到0就变为1,为什么全被变为1了?
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define maxn 10
#define maxm 10
int a[12][12];
int b[5]={1,0,-1,0,1};
void check(int x,int y)
{ for(int i=0;i<=4;i++)
if(x+b[i]>0&&y+b[i+1]>0&&x+b[i]<=maxn&&y+b[i+1]<=maxm&&a[x+b[i]][y+b[i+1]]==0)
{ a[x+b[i]][y+b[i+1]]=1;
// cout<<x+b[i]<<" "<<y+b[i+1]<<endl;
check(x+b[i],y+b[i+1]);
}
}
int main()
{
int ans=0;
memset(a,0,sizeof(a));
for(int i=1;i<=maxn;i++)
for(int j=1;j<=maxm;j++)
cin>>a[i][j];
for(int i=1;i<=maxn;i++)
for(int j=1;j<=maxm;j++)
{
if(a[1][j]==0) {a[1][j]=1; check(1,j);}
// if(a[i][1]==0) {a[i][1]=1; check(i,1);}
// if(a[maxn][j]==0) {a[maxn][j]=1;check(maxn,j);}
// if(a[i][maxm]==0) {a[i][maxm]=1;check(i,maxm);}
}
for(int i=1;i<=maxn;i++)
for(int j=1;j<=maxm;j++)
if(a[i][j]==0) ans++;
cout<<ans;
}