最大岛屿

题目描述:神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等。加勒比海盗,你知道吧?杰克船长驾驶着本身的的战船黑珍珠1号要征服各个海岛的海盜,最后成为海盗王。  这是一个由海洋、岛屿和海盗组成的危险世界。面对危险重重的海洋与诡谲的对手,如何凭借智慧与运气,创建起一个强大的海盗帝国。app

杰克船长手头有一张整个海域的海图,上面密密麻麻分布着各个海屿的位置及面积。他想尽快知道整个海域共有多少岛屿以及最大岛屿的面积。函数

 

输入

第1行:M N T,表示海域的长,宽及一个单位表示的面积大小 接下来有M行 ,每行有N个01组成的序列以及其中穿插一些空格。0表示海水,1表示陆地,其中的空格没用,能够忽略掉。
 

输出

输出一行,有2个整数,一个空格间隔,表示整个海域的岛屿数,以及最大岛屿的面积                
 

样例输入

8 16 99
00000000 00000000
0000110011000000
0001111000111000
0000000  00 0000000
00111  111000001  10
001110000  0000000
0100001111 111100
0000000000000000

提示
   ①若一个陆地八个方向之一(上、下、左、右、左上、右上、左下、右下)的位置也是陆地,则视为同一个岛屿。
   ② 假设第一行,最后一行,第一列,最后一列全为0.
   ③ 1<M,   N≤500      1<T≤100000。

样例输出

5 990
此题是属于搜索的题难度通常。重在思想。
下面是我的对此题的见解:
 这道题和水池数目的题差很少。首先是输入的时候有个别容易忽略的地方,scanf函数的输入在最后最好用getchar()函数进行处理一下。为的是处理回车键。而后是对空格的处理,因为scanf函数能够接收
空格,因此在用scanf函数的时候应该对空格进行消去。而后是调用函数中的8方向处理同时须要对每一个岛屿中的单位岛屿进行计数。
下面附上代码:



 

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<string.h>
 4 #include <math.h>
 5 
 6 char a[501][501];
 7 int N,M,T,num1;
 8 void ty(int y,int x)
 9 {
10     num1++;
11     a[y][x]='0';
12     int str[8][2]={0,-1,0,1,-1,0,1,0,-1,-1,-1,1,1,1,1,-1};
13         for(int k=0;k<8;k++)
14         {
15             int zx=x+str[k][1],zy=y+str[k][0];
16             if(zx>=0&&zx<N&&zy>=0&&zy<M&&a[zy][zx]=='1')
17                 {
18                     ty(zy,zx);
19                 }
20         }
21 }
22 int main ()
23 {
24     int i,j,num=0,sum[500],t=0;
25     char q;
26     scanf("%d%d%d",&M,&N,&T);
27     getchar();
28     for(i=0;i<M;i++)
29     {
30         for(j=0;j<N;j++)
31         {
32              scanf("%c",&q);
33              if(q==' ')
34                 j--;
35              else
36                 a[i][j]=q;
37         }
38         getchar();
39     }
40     for(i=0;i<M;i++)
41     {
42         for(j=0;j<N;j++)
43         {
44             if(a[i][j]=='1')
45             {
46                 num1=0;
47                 ty(i,j);
48                 num++;
49                 sum[t]=num1;
50                 t++;
51             }
52         }
53     }
54     for(i=0;i<t;i++)
55     {
56         if(sum[i]>sum[0])
57             sum[0]=sum[i];
58     }
59     printf("%d %d\n",num,sum[0]*T);
60     return 0;
61 }
相关文章
相关标签/搜索