面积(area)
题目描述
编程计算由“ * ”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线中水平线和垂 直线交点的数目。如下图所示,在 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
思路
先将原n*m矩阵的n-1与n+1行,m-1与m+1列全部赋值为2,进行DFS,是要当前元素是0且其上下左右存在一个及以上的2,将该元素改为2.
最后循环n*m矩阵剩余0的数量,即为最终所求答案。
总的来说,就是这种巧妙应对的方式,跟暴枚时间复杂度差不多,不过也不至于TLE
c++AC代码
#include<bits/stdc++.h>
using namespace std;
char a[105][105];
int ans;
inline void dfs(int i,int j){
if(a[i][j-1]=='2'||a[i][j+1]=='2'||a[i-1][j]=='2'||a[i+1][j]=='2'){
a[i][j]='2';
if(a[i][j-1]!='1')a[i][j-1]='2';
if(a[i][j+1]!='1')a[i][j+1]='2';
if(a[i-1][j]!='1')a[i-1][j]='2';
if(a[i+1][j]!='1')a[i+1