面积问题最简做法
1、编程计算由“*”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目。如下图所示,在10*10的二维数组中,有“*”围住了15个点,因此面积为15。
【样例输入】area.in
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
【样例输出】area.out
15
1 #include<iostream> 2 using namespace std; 3 int xx[5]={-1,+1,0,0}; 4 int yy[5]={0,0,-1,+1}; 5 int a[101][101]; 6 void dfs(int i,int j) 7 { 8 a[i][j]=1; 9 for(int k=0;k<4;k++) 10 { 11 int x=i+xx[k]; 12 int y=j+yy[k]; 13 if(x>=1&&x<=10&&y>=1&&y<=10&&a[x][y]==0) 14 { 15 16 dfs(x,y); 17 } 18 } 19 } 20 int main() 21 { 22 for(int i=1;i<=10;i++) 23 { 24 for(int j=1;j<=10;j++) 25 { 26 cin>>a[i][j]; 27 } 28 } 29 for(int i=1;i<=10;i++) 30 { 31 if(a[1][i]==0) 32 { 33 dfs(1,i); 34 } 35 if(a[i][1]==0) 36 { 37 dfs(i,1); 38 } 39 if(a[10][i]==0) 40 { 41 dfs(10,i); 42 } 43 if(a[i][10]==0) 44 { 45 dfs(i,10); 46 } 47 } 48 int tot=0; 49 for(int i=1;i<=10;i++) 50 { 51 for(int j=1;j<=10;j++) 52 { 53 if(a[i][j]==0) 54 tot++; 55 } 56 } 57 cout<<tot; 58 return 0; 59 }
作者:自为风月马前卒
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。