思路
- 广度优先遍历,跟岛屿的数量一致
代码
#include<stdio.h>
#define max(a,b) ((a)>(b)?a:b)
int max_area(int gridSize, int gridColSize,int **grid,int hang,int lie ){
if(hang<0||hang>=gridSize||lie<0||lie>=gridColSize){
printf("1\n");
return 0;
}
if(*((int*)grid+hang*gridColSize+lie)==0)
return 0;
if(*((int*)grid+hang*gridColSize+lie)==1){
*((int*)grid+hang*gridColSize+lie)=0;
printf("hang = %d lie = %d\n",hang,lie);
int t1=max_area(gridSize, gridColSize,grid,hang+1,lie);
int t2=max_area(gridSize, gridColSize,grid,hang-1,lie);
int t3=max_area(gridSize, gridColSize,grid,hang,lie+1);
int t4=max_area(gridSize, gridColSize,grid,hang,lie-1);
printf("t1=%d t2=%d t3=%d t4=%d\n",t1,t2,t3,t4);
return (1+t1+t2+t3+t4);
}
}
int maxAreaOfIsland(int gridSize, int gridColSize,int **grid){
int maxarea = 0;
int i =0,j=0;
for(i=0;i<gridSize;i++){
for(j=0;j<gridColSize;j++){
if(*((int*)grid+i*j+j)==1){
int val = max_area(gridSize,gridColSize,grid,i,j);
maxarea = max(maxarea,val);
}
}
}
return maxarea;
}
int main(){
int grid[2][2]={{1,0},{1,0}};
int gs = 2;
int gcs = 2;
int i,j;
for(i=0;i<2;i++){
for(j=0;j<2;j++){
printf("%d ",grid[i][j]);
}
printf("\n");
}
int res = maxAreaOfIsland(gs,gcs,(int **)grid);
for(i=0;i<2;i++){
for(j=0;j<2;j++){
printf("%d ",grid[i][j]);
}
printf("\n");
}
printf("res = %d\n",res);
return 0;
}
leetcode
#define max(a,b) ((a)>(b)?a:b)
int max_area(int gridSize, int gridColSize,int **grid,int hang,int lie ){
if(hang<0||hang>=gridSize||lie<0||lie>=gridColSize){
//printf("1\n");
return 0;
}
if(grid[hang][lie]==0)
return 0;
if(grid[hang][lie]==1){
grid[hang][lie]=0;
//printf("hang = %d lie = %d\n",hang,lie);
int t1=max_area(gridSize, gridColSize,grid,hang+1,lie);
int t2=max_area(gridSize, gridColSize,grid,hang-1,lie);
int t3=max_area(gridSize, gridColSize,grid,hang,lie+1);
int t4=max_area(gridSize, gridColSize,grid,hang,lie-1);
//printf("t1=%d t2=%d t3=%d t4=%d\n",t1,t2,t3,t4);
return (1+t1+t2+t3+t4);
}
return 0;
}
int maxAreaOfIsland(int** grid, int gridSize, int* gridColSize){
int maxarea = 0;
int i =0,j=0;
//printf("csize = %d\n",*gridColSize);
for(i=0;i<gridSize;i++){
for(j=0;j<*gridColSize;j++){
if(grid[i][j]==1){
int val = max_area(gridSize,*gridColSize,grid,i,j);
maxarea = max(maxarea,val);
}
}
}
return maxarea;
}