题目
map是一个二维数组,其中为0的元素表示水域,为1的元素代表土地,一个 岛屿 是水平或垂直方向连续的 1 所构成。假设map的四个边缘外部也都是水域。请实现一个函数,找到最大的岛屿面积。(如果没有岛屿,则返回0)

代码


#include<stdio.h>
int a[8][8]={
   {0, 0, 0, 0, 0, 0, 0, 0},
     {0, 0, 0, 0, 1, 0, 0, 0},
     {0, 0, 0, 0, 1, 0, 0, 0},
     {0, 0, 1, 1, 1, 1, 0, 1},
     {0, 0, 0, 0, 1, 1, 0, 0},
     {0, 0, 0, 0, 1, 0, 0, 0},
     {0, 0, 0, 0, 1, 0, 0, 0},
     {1, 1, 1, 1, 1, 1, 1, 0},
};

int len=8;
int sign=2;
int max=0;
void node(int i,int j){
    if(i+1<=len && a[i+1][j]==1){
        a[i+1][j]=sign;
        node(i+1,j);
    }
    if(j+1<=len && a[i][j+1]==1){
        a[i][j+1]=sign;
        node(i,j+1);
    }
    if(i-1>=0 && a[i-1][j]==1){
        a[i-1][j]=sign;
        node(i-1,j);
    }
    if(j-1>=0 && a[i][j-1]==1){
        a[i][j-1]=sign;
        node(i,j-1);
    }
    
}
int main(){
    int i,j,m,n;
    for(i=0;i<len;i++){
        for(j=0;j<len;j++){
            if(a[i][j]==1){
                a[i][j]=sign;
                node(i,j);
            }
            int cnt=0;
            for(m=0;m<len;m++){
                for(n=0;n<len;n++){
                    if(a[m][n]==sign){
                        cnt++;
                        a[m][n]=0;
                    }
                }
            }
            if(cnt>max){
                max=cnt;
            }
        }
    }
    printf("%d",max);
}
最后修改:2019 年 07 月 23 日
如果觉得我的文章对你有用,请随意赞赏