【题解】面积(area)

该博客介绍了如何计算由'*'号围成的图形的面积,通过在图形周围加一圈'0',然后使用BFS或DFS模拟倒水过程,统计未被水淹没的部分来确定面积。文章详细阐述了思路并提供了代码实现的大概步骤。
摘要由CSDN通过智能技术生成

题目

题目描述

编程计算由“ * ”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线中水平线和垂 直线交点的数目。如下图所示,在 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

输入格式

一个矩阵。

输出格式

面积

样例

样例输入

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’)围起来的地,现在我们在墙外倒水(假设水无限多),一段时间后,没被水淹的部分的面积即为所求;

现在我们模拟倒水的过程即可:

1.在哪倒水?

有人会说在 左上角/左下角/右上角/右下角 倒水,但这都不好,因为如果这样,水就有可能倒到墙上QAQ

所以我们不妨在这块地的周围再加一圈‘0’,然后在新地的 左上角/左下角/右上角/右下角 倒水,至于你要真想在新地的一个对你有特殊意义的地方倒水比如…250,我也无话可说,但要注意一定要在新加的一圈地上倒,否则就白搭。

2.水不能流遍该流的地方怎么办

我知道,你们是在担心这种毒瘤数据:

0 0 0 1 0 0 0 0 0 0
0 0 1 0 1 0 0 0 0 0
0 0 1 0 0 1 0 0 0 0
0 1 0 0 0 1 0 0 0 0
1 0 0 0 0 0 1 0 0 0
0 1 1 1 1 1 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

如果这样你还选择在左上角倒水,水就只会被堵在左上角一块,统计的时候就GG了,还是刚才那招,在这块地的周围加一圈‘0’,这样新加的一圈就起到了连通的作用,

代码实现大致思路

1.首先你需要在这块地的周围加一圈‘0’

2.然后你需要一个BFS/DFS函数,用来模拟流水过程

3.最后统计没被水淹的部分,完成!!!

代码

#include<cstdio>
#include<iostream>
using namespace std;
int arr[15][15];
void bfs(int i,int j)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值