题目
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);
}
1 条评论
完美