题目描述
编程计算由“1”号围成的下列图形的面积。面积计算方法是统计1号所围成的闭合曲线中水平线和垂直线交点的数目。如下图所示,在10*10的二维数组中,有“1”围住了15个点,因此面积为15。
输入
一个10*10的二维数组
输出
面积
样例输入
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 附AC码:#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> using namespace std; int a[11][11],sum=0; int r[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; void dfs(int i,int j){ a[i][j]=1; for(int u=0;u<=3;u++) if(a[i+r[u][0]][j+r[u][1]]!=1 && i+r[u][0]>0 && i+r[u][0]<=10 && j+r[u][1]>0 && j+r[u][1]<=10) dfs(i+r[u][0],j+r[u][1]); } int main(){ int i,j,k,m,n; for(i=1;i<=10;i++) for(j=1;j<=10;j++) scanf("%d",&a[i][j]); for(i=1;i<=10;i++) for(j=1;j<=10;j++) if((i==1 || j==1 || i==10 || j==10) && a[i][j]==0) dfs(i,j); for(i=1;i<=10;i++) for(j=1;j<=10;j++) if(a[i][j]==0) sum++; printf("%d\n",sum); return 0; }