面积

题目描述

一幅图由0和×组成,编程计算由“×”号所围成的图形的面积。面积的计算方法是统计×号所围成的闭合曲线中0的数目。

输入输出格式

输入格式:

由0,×组成的图(最多10行,每行不超过200个字符)。

输出格式:

一行,一个整数,为面积数。

输入输出样例

输入样例:
000000000
0000**000
000*00*00
00*000*00
000***000
000000000
输出样例:
5

思路:遍历图周围,如找到'0'则沿上下左右,找寻连在一起的,标记。最后统计未被标记的个数。
代码:
//程序名:新的C++程序
//作者: 

#include<iostream>
#include<fstream>
#include<algorithm>

using namespace std;
string c;
int a[11][201],b[11][201],n,m,e,z,y,ans;
void dfs(int w,int x)
{
    if(!a[w-1][x]&&w-1>0){a[w-1][x]=2;dfs(w-1,x);}
    if(!a[w][x-1]&&x-1>0){a[w][x-1]=2;dfs(w,x-1);}
    if(!a[w+1][x]&&w+1<=z){a[w+1][x]=2;dfs(w+1,x);}
    if(!a[w][x+1]&&x+1<=y){a[w][x+1]=2;dfs(w,x+1);}
    return;
}
void printf()
{
    for(int i=1;i<=z;i++)
    {
        for(int j=1;j<=y;j++)cout<<a[i][j]<<" ";
        cout<<endl;
    }
    cout<<endl;
}
int main()
{
    while(cin>>c)
    {
        z++;y=0;
        for(int i=0;i<c.size();i++)
        {
            if(c[i]=='0')a[z][++y]=0;
            else a[z][++y]=1;
        }
    }
    for(int i=1;i<=z;i++)
    {
        for(int j=1;j<=y;j++)
        {
            if(i>1&&i<z&&j>1&&j<y)continue;
            if(a[i][j]==0)a[i][j]=1,dfs(i,j);
            //printf();
        }
    }
    for(int i=1;i<=z;i++)
        for(int j=1;j<=y;j++)if(a[i][j]==0)ans++;
    cout<<ans;
    return 0;
}
 
View Code

 

posted @ 2019-04-15 13:26  背‘水’一栈  阅读(292)  评论(0编辑  收藏  举报