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 }