闭合区域面积统计(题解)

您所在的位置:网站首页 编程计算图形的面积 闭合区域面积统计(题解)

闭合区域面积统计(题解)

2024-02-21 08:06| 来源: 网络整理| 查看: 265

题目描述编程计算由‘*’号围成的下列图形的面积。面积的计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目。如图所示,在10*10 的二维数组中,有*围住了15 个点,因此面积为15。0 0 0 0 0 0 0 0 0 00 0 0 0 * * * 0 0 00 0 0 0 * 0 0 * 0 00 0 0 0 0 * 0 0 * 00 0 * 0 0 0 * 0 * 00 * 0 * 0 * 0 0 * 00 * 0 0 * * 0 * * 00 0 * 0 0 0 0 * 0 00 0 0 * * * * * 0 00 0 0 0 0 0 0 0 0 0输入一个10*10 的二维数组, 里面的数为0 和1,1 代表着*号。输出一个整数, 被围住的点。样例输入0 0 0 0 0 0 0 0 0 00 0 0 0 1 1 1 0 0 00 0 0 0 1 0 0 1 0 00 0 0 0 0 1 0 0 1 00 0 1 0 0 0 1 0 1 00 1 0 1 0 1 0 0 1 00 1 0 0 1 1 0 1 1 00 0 1 0 0 0 0 1 0 00 0 0 1 1 1 1 1 0 00 0 0 0 0 0 0 0 0 0样例输出15

 

  这道题可以用宽搜来解决。

  先开两个队列,用来存走过的每一个点的坐标。之后直接计算闭合区间的面积是很费劲的,但是如果把这个面积之外到整个边界的数都转换成“1”的话,就可以直接算“0”的个数,就是图形的面积了。

  所以:

#include #include #include using namespace std; int map[15][15]; int nx[5] = {0,0,1,-1}; int ny[5] = {1,-1,0,0}; queue x; queue y; void bfs(int a,int b) { x.push(a); y.push(b); while(x.empty() == 0) { for(int i = 0; i < 4; i++) { if(x.front() + nx[i] = 0&&y.front() + ny[i] = 0&&map[x.front() + nx[i]][y.front() + ny[i]] == 0) { x.push(x.front() + nx[i]); y.push(y.front() + ny[i]); map[x.front() + nx[i]][y.front() + ny[i]] = 1; } } x.pop(); y.pop(); } } int main() { //freopen("area.in","r",stdin); //freopen("area.out","w",stdout); int num; for(int i = 1; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3