面积
时间限制:10000 MS
空间限制 : 65536 KB
问题描述
编程计算由“1”围成的下列图形的面积。面积计算方法是统计"1"所围成的闭合曲线中水平线和垂直线交点的数目。如右下图所示,在10*10的二维数组中,有“1”围住了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和1构成的一个10*10的矩阵
输出格式
一个整数,表示所求面积
样例输入
0 1 1 1 1 1 1 1 1 0
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
0 1 1 1 1 1 1 1 1 0
样例输出
64
思路:
给图形四周围上一圈-1。
for(int i=0; i<12; i++)
{
map[i][0]=-1;
map[0][i]=-1;
map[i][11]=-1;
map[11][i]=-1;
}
判断每个0的四周(上下左右)是否存在-1,若存在-1,把0变为为-1。
for(int i=10; i>=1; i--)
for(int j=10; j>=1; j--)
if(map[i][j]==0&&(map[i-1][j]==-1||map[i][j-1]==-1||map[i+1][j]==-1||map[i][j+1]==-1))
map[i][j] = -1;
最后只要计算0的个数就行了。
for(int j=1; j<=10; j++)
for(int i=1; i<=10; i++)
if(map[i][j]==0)
{
ans++;
}
水,超水的!!!!!!!!!!!!!!!
AC代码:
#include<iostream>
using namespace std;
int map[20][20];
int ans;
int main()
{
for(int i=0; i<12; i++)
{
map[i][0]=-1;
map[0][i]=-1;
map[i][11]=-1;
map[11][i]=-1;
}
for(int i=1; i<=10; i++)
for(int j=1; j<=10; j++)
cin>>map[i][j];
for(int i=10; i>=1; i--)
for(int j=10; j>=1; j--)
if(map[i][j]==0&&(map[i-1][j]==-1||map[i][j-1]==-1||map[i+1][j]==-1||map[i][j+1]==-1))
map[i][j] = -1;
for(int j=1; j<=10; j++)
for(int i=1; i<=10; i++)
if(map[i][j]==0&&(map[i-1][j]==-1||map[i][j-1]==-1||map[i+1][j]==-1||map[i][j+1]==-1))
map[i][j] = -1;
for(int j=1; j<=10; j++)
for(int i=1; i<=10; i++)
if(map[i][j]==0)
{
ans++;
}
cout<<ans;
}
The end
最后:制作不易,点个赞吧,求求了