标题:请教这道题为什么错了
只看楼主
lili3499
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2016-6-12
结帖率:14.29%
 问题点数:0 回复次数:1 
请教这道题为什么错了
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;
}
搜索更多相关主题的帖子: include 计算方法 水平线 统计 
2016-08-19 20:58
lili3499
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2016-6-12
得分:0 
已经解决了
2016-08-21 19:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-468038-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022993 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved