注册 登录
编程论坛 C++教室

请教这道题为什么错了

lili3499 发布于 2016-08-19 20:58, 2160 次点击
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;
}
1 回复
#2
lili34992016-08-21 19:24
已经解决了
1