面积问题最简做法

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 }

 

 
posted @ 2017-03-29 19:11  自为风月马前卒  阅读(392)  评论(0编辑  收藏  举报

Contact with me