图形面积——竞赛水题

题目描述

编程计算由“*”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目。如下图所示,在10*10的二维数组中,有“*”围住了15个点,因此面积为15。

图形面积

输入

输入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

解题思路

给图形四周围上一圈由-1;判断每个0的四周(上下左右)是否存在-1,若存在-1,把0变为为-1。最后只要计算0的个数就行了。

如下图

-1-1-1-1-1-1-1-1-1-1-1-1
-1 0 0 0 0 0 0 0 0 0 0-1 
-1 0 0 0 0 1 1 1 0 0 0-1 
-1 0 0 0 0 1 0 0 1 0 0-1 
-1 0 0 0 0 0 1 0 0 1 0-1 
-1 0 0 1 0 0 0 1 0 1 0-1 
-1 0 1 0 1 0 1 0 0 1 0-1 
-1 0 1 0 0 1 1 0 1 1 0-1 
-1 0 0 1 0 0 0 0 1 0 0-1 
-1 0 0 0 1 1 1 1 1 0 0-1 
-1 0 0 0 0 0 0 0 0 0 0-1
-1-1-1-1-1-1-1-1-1-1-1-1


 代码如下:

#include<iostream>
#include<string>
using namespace std;
int pan[12][12];
int main()
{
    int sum=0;
    for(int i=0;i<12;i++)
        for(int j=0;j<12;j++)
        pan[i][j]=0;
    for(int i=0;i<12;i++)
    {
            pan[i][0]=-1;
            pan[0][i]=-1;
            pan[i][11]=-1;
            pan[11][i]=-1;
    }
    for(int i=1;i<11;i++)
        for(int j=1;j<11;j++)
        {
            cin>>pan[i][j];
        }
     
    for(int i=1;i<11;i++)
        for(int j=1;j<11;j++)
        {
            if(pan[i][j]==0&&pan[i-1][j]==-1)
                pan[i][j]=-1;
            if(pan[i][j]==0&&pan[i][j-1]==-1)
                pan[i][j]=-1;
            if(pan[i][j]==0&&pan[i+1][j]==-1)
                pan[i][j]=-1;
            if(pan[i][j]==0&&pan[i][j+1]==-1)
                pan[i][j]=-1;               
        }
    for(int j=1;j<11;j++)
        for(int i=1;i<11;i++)
        {
            if(pan[i][j]==0&&pan[i-1][j]==-1)
                pan[i][j]=-1;
            if(pan[i][j]==0&&pan[i][j-1]==-1)
                pan[i][j]=-1;
            if(pan[i][j]==0&&pan[i+1][j]==-1)
                pan[i][j]=-1;
            if(pan[i][j]==0&&pan[i][j+1]==-1)
                pan[i][j]=-1;               
        }   
    for(int i=1;i<11;i++)
        for(int j=1;j<11;j++)
        {
            if(pan[i][j]==0)
            sum++;
        }
    cout<<sum;        
}

猜你喜欢

转载自blog.csdn.net/Genius_panda_ACM/article/details/81254840