• 闭合区域面积统计


    闭合区域面积统计(area

    题目描述

    编程计算由‘*’号围成的下列图形的面积。面积的计算方法是统计*号所围成

    的闭合曲线中水平线和垂直线交点的数目。如图所示,在10*10 的二维数组中,

    有*围住了15 个点,因此面积为15。

    0 0 0 0 0 0 0 0 0 0

    0 0 0 0 * * * 0 0 0

    0 0 0 0 * 0 0 * 0 0

    0 0 0 0 0 * 0 0 * 0

    0 0 * 0 0 0 * 0 * 0

    0 * 0 * 0 * 0 0 * 0

    0 * 0 0 * * 0 * * 0

    0 0 * 0 0 0 0 * 0 0

    0 0 0 * * * * * 0 0

    0 0 0 0 0 0 0 0 0 0

    输入

    一个10*10 的二维数组, 里面的数为0 和1,1 代表着*号。

    输出

    一个整数, 被围住的点。

    样例输入

    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

    样例输出

    15

    ****看起来应该不会所以直接输出样例。

    #include<cstdio>

    #include<cstring>

    int sum=0;

    int a[15][15];

    void dfs(int x,int y)

    {

      if(x>11||y>11||x<0||y<0)return;   //如果过了这个图的边界就返回

      if(a[x][y])return;  //如果碰到了*边界那说明前面的这些都是不要的返回

      if(a[x][y]==2){   //如果碰到已经计完数的点

        dfs(x+1,y);    //就在有限的图里面上下左右的继续搜索

        dfs(x,y+1);

        if(x!=0)

        dfs(x-1,y);

        if(y!=0)

        dfs(x,y-1);

        return;

      }

      sum++;    //不被围起来的点计数

      a[x][y]=2;  //把这些点标记已计数

      dfs(x+1,y);  

      dfs(x,y+1);//在有限的图里面上下左右的继续搜索

      if(x!=0)

      dfs(x-1,y);

      if(y!=0)

      dfs(x,y-1);

      return;

    }

    int main()

    {

      freopen("area.in","r",stdin),freopen("area.out","w",stdout);

      memset(a,0,sizeof(a));

      for(int i=1;i<=10;i++){

        for(int j=1;j<=10;j++){

          scanf("%1d",&a[j][i]);     //输入图形

          if(a[j][i]==1)sum++;      //所有的不可能被围住的*数量

        }

      }

      dfs(0,0);

      printf("%d",144-sum);//当初算的时候是吧整个图扩大了,所以用整个图减去不被围住的就是被围住的点

      return 0;

    }

     

    ****这道题呢就是和这个图差不多。要求的是在黄色里面搜索围起来的面积,围起来的面积不好求,那就换一个角度思考问题,可以考虑用所有点减去不被围起来的面积,考虑到边界的问题,就把整个图扩大,长宽各扩大一导致成为一个12*12的正方形,然后搜索所有不被围起来的点用144减去就能得到正解。

  • 相关阅读:
    singleton模式 在软件开发中的运用
    State Pattern
    闲话闲说——关于异常
    程序人生
    Event
    SerialPort实现modem的来电显示
    利用枚举进行状态的设计
    职责链模式的运用
    我对当前项目的一些看法
    SHAREPOINT 2007 网站模板(解决方案)安装和卸载
  • 原文地址:https://www.cnblogs.com/rax-/p/8719902.html
Copyright © 2020-2023  润新知