题目描述:神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等。加勒比海盗,你知道吧?杰克船长驾驶着本身的的战船黑珍珠1号要征服各个海岛的海盜,最后成为海盗王。 这是一个由海洋、岛屿和海盗组成的危险世界。面对危险重重的海洋与诡谲的对手,如何凭借智慧与运气,创建起一个强大的海盗帝国。app
杰克船长手头有一张整个海域的海图,上面密密麻麻分布着各个海屿的位置及面积。他想尽快知道整个海域共有多少岛屿以及最大岛屿的面积。函数
8 16 99 00000000 00000000 0000110011000000 0001111000111000 0000000 00 0000000 00111 111000001 10 001110000 0000000 0100001111 111100 0000000000000000
提示
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 }