陈柏凉 2022-01-09 15:03 采纳率: 86.7%
浏览 40
已结题

怎么求岛屿最大面积问题

#include <stdio.h>
#define NUM 10

int ocean[NUM][NUM] = {        //面积为最大为15
 1,1,0,0,0,0,0,0,1,0
,1,1,1,1,0,0,0,0,0,0
,0,1,0,0,0,1,0,0,1,1
,0,0,1,1,1,1,1,0,0,1
,0,0,1,1,1,0,0,0,0,0
,1,0,1,0,1,0,0,0,0,0
,1,0,1,1,1,0,0,0,0,0
,0,0,1,0,0,0,0,0,1,0
,0,0,0,0,0,0,0,0,1,1
,0,0,0,0,0,0,0,0,0,0 };

int temp[NUM][NUM];            //标记走过的位置 

int Next[4][2] = { {0,1},{1,0},{0,-1},{-1,0} };        //四种走法,右下左上 

int Max = -1;            //最大岛屿面积 

int area;

void dfs(int x, int y) {

    int tx,ty;
    
    if(area>Max){
        Max=area;
    }
    
    for(int k=0;k<=3;k++){
        tx=x+Next[k][0];
        ty=y+Next[k][1];
        
        if(tx>NUM-1||tx<0||ty<0||ty>NUM-1){
            continue;
        }
        
        if(ocean[tx][ty]==1&&temp[tx][ty]==0){    
            temp[tx][ty]=1;
            area++;        //自增 1 表示ocean[x][y]的面积 ,并不是oceam[tx][ty] 
            dfs(tx,ty);
        }
        
    }
}

int main() {
    
    for(int i=0;i<=NUM-1;i++){
        for(int j=0;j<=NUM-1;j++){
            if(ocean[i][j])
            dfs(i, j);
        }
        area=0;
    }
    
    for(int i=0;i<=NUM-1;i++){
        for(int j=0;j<=NUM-1;j++){
            printf("%d ",temp[i][j]);
        }
        printf("\n");
    } 

//    dfs(3,3);

    printf("最大岛屿面积为%d\n", Max);

    return 0;
}

我从(3,3)开始测试岛屿最大面积的时候,结果是正确答案15,但是我用两层for循环测试每个地方的最大岛屿面积,结果却是18

  • 写回答

1条回答 默认 最新

  • 赵东19970820 2022-01-09 15:19
    关注

    你可以先拿到岛屿的数量,再想办法求哪个岛屿最大

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月25日
  • 已采纳回答 2月17日
  • 创建了问题 1月9日

悬赏问题

  • ¥40 图书信息管理系统程序编写
  • ¥15 7-1 jmu-java-m02-使用二维数组存储多元线性方程组
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题