题解-面积

面积
Description
编程计算由“”号围成的下列图形的面积。面积计算方法是统计号所围成的闭合曲线中水平线和垂 直线交点的数目。如下图所示,在 1010 的二维数组中,有“”围住了 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
Input
输入1010的数字矩阵
Output
输出面积
Sample Input 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
Sample Output 1
15
——YCOJ
提示:可以按照洛谷填涂颜色的代码来写。
P1126填涂颜色。有兴趣的可以去看一下,他们的方法与代码极其相似,只需将本题的输出改一下。
注意:填涂颜色的是n
n的二维数组,这里是10*10.否则——题解-面积_第1张图片
或者——
在这里插入图片描述
(不说废话了☆ ̄(>。☆)时光不老)这道题先说思路。
思路:用dfs来穿插四个方向,这可以找准路线,再依次判断走过的路线是否标记过。
解析:当其中这个图他们找到一时,就可以来判断一下是否合法,后面部分就开判断四个方向是否有一,是就累计,不是就继续判断。
显然,必须将0全部包起来,才算,但是,我认为用dfs更容易理解,(BFS也行 (~ ̄▽ ̄)~ )
输出可用if语句来判断在累计
题解-面积_第2张图片
AC代码:

#include 
using namespace std;
int a[1000][1000],b[1000][1000]={0};
int x,y;
int ans=0;
bool in(int x,int y){
	return x<1||x>10||y<1||y>10;
}
void dfs(int x,int y){
	if(in(x,y)||a[x][y]!=0)
	return;
		a[x][y]=1;
		dfs(x+1,y);
		dfs(x-1,y);
		dfs(x,y+1);
		dfs(x,y-1);
}
int main() {
	for(int i=1;i<=10;i++){
		for(int j=1;j<=10;j++){
			cin>>a[i][j];
			if(a[i][j]==1)b[i][j]=-1;
		}
	}
	for(int i=1;i<=10;i++){
		if(a[i][1]!=1){
			dfs(i,1);
		}
    	if(a[i][10]!=1){
    		dfs(i,10);
		}
	}
	for(int i=1;i<=10;i++){
		if(a[1][i]!=1){
			dfs(1,i);
		}
    	if(a[10][i]!=1){
    		dfs(10,i);
		}
	}
	for(int i=1;i<=10;i++){
		for(int j=1;j<=10;j++){
			if(a[i][j]==0){
				ans++;
			}
		} 
	}
	cout<

好了不说了,自己去照着办罒ω罒。。。。。。。。。。。。。。。。。。

你可能感兴趣的:(题解)