題目描述:神祕的海洋,驚險的探險之路,打撈海底寶藏,激烈的海戰,海盜劫富等等。加勒比海盜,你知道吧?傑克船長駕駛着本身的的戰船黑珍珠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 }