求岛屿最大面积

  • 题目
  • 源代码
  • 结果
  • 解释

题目

给定一个包含了一些0和1的非空二维数组,一个岛屿是由一些相邻的1(代表土地)构成的组合,这里的「相邻」要求两个1必须在水平或者竖直方向上相邻。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)
数据范围:长宽都不超过50。

源代码

#include<iostream>
using namespace std;int a, b;
int data1[50][50];
bool visited[50][50] = {false};
int Dfs(int m, int n)
{int s = 0;if(data1[m][n] && !visited[m][n])s++;elsereturn 0;visited[m][n] = true;if( m - 1 >= 0)s += Dfs(m - 1, n);if(m + 1 < a)s += Dfs(m + 1, n);if( n - 1 >= 0)s += Dfs(m, n - 1);if( n + 1 < b)s += Dfs(m, n + 1);return s;
}int max_s()
{int num[50] = {0};int k = 0;for (int i = 0; i < a; i++)for (int j = 0; j < b; j++)if (data1[i][j] && !visited[i][j]){num[k] = Dfs(i, j);k++;}int max = num[0];for (int i = 1; i < k; i++)if(num[i] > max)max = num[i];return max;
}int main()
{cout << "请输入矩阵的行:";cin >> a;cout << "请输入矩阵的列:";cin >> b;cout << "输入矩阵中的数据:";for (int i = 0; i < a; i++)for (int j = 0; j < b; j++)cin >> data1[i][j];cout << max_s() << endl;return 0;
}

结果

测试数据
1 0 0 1 0 1 1 0 1 0
0 0 1 1 1 0 1 0 0 1
0 1 1 0 1 0 1 1 1 1
0 0 1 0 0 1 1 1 0 0
1 0 1 1 0 0 0 0 0 0
0 0 0 0 1 0 1 1 1 1

解释

这里我采用了类似于求图边数的思想。
首先设一bool型visited数组,用来判断该点是否被访问过(初始值全为false)。
由于一组数据中可能会出现多个岛屿,设一int型num数组,用于存放所求得的岛屿面积,然后再找出其中的最大值。
在函数max_s()中遍历每个点,如果这个点值为1且没有被访问过,就对这个点进行深度优先搜索。
在函数Dfs(int m, int n)中如果这个点值为1且没有被访问过就将该岛屿面积s加一,如果不符合条件直接返回0;每访问一个点后都将其对应的visited数组中位置设为true,然后搜索该点上下左右的四个点(如果在范围之内的话),所有的搜索完成后返回s。

DFS求岛屿最大面积相关推荐

  1. 求岛屿的最大面积java

    求岛屿的最大面积 给定一个包含了一些 0 和 1 的非空二维数组 grid . 一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻.你可 ...

  2. 【算法题目】【DFS】岛屿数量 岛屿中面积最大值

    1岛屿数量 题目很好理解,dfs来一套即可: (1)二维的,没考虑特殊情况: (2)对每个网格dfs,每次dfs往上下左右搜 (3)grid是list,在python里面会是一个全局,第一次搜到记一次 ...

  3. 岛屿问题和昆虫越障问题以及岛屿最大面积

    岛屿问题 题目地址:https://leetcode-cn.com/problems/number-of-islands/submissions/ package A.giao;public clas ...

  4. LeetCode岛屿最大面积

    695. 岛屿的最大面积 给你一个大小为 m x n 的二进制矩阵 grid . 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻 ...

  5. YTU 2723: 默认参数--求圆的面积

    2723: 默认参数--求圆的面积 时间限制: 1 Sec  内存限制: 128 MB 提交: 206  解决: 150 题目描述 根据半径r求圆的面积, 如果不指定小数位数,输出结果默认保留两位小数 ...

  6. P5357 【模板】AC自动机(二次加强版)(AC自动机建fail树dfs求模式串出现次数)

    P5357 [模板]AC自动机(二次加强版)(AC自动机建fail树dfs求模式串出现次数) 传送门 形式上,AC 自动机基于由若干模式串构成的 Trie 树,并在此之上增加了一些 fail 边:本质 ...

  7. Android 求圆的面积

    计算机应用112班  孔秋静 在Android中实现求圆的面积. 在Layout 中添加一个EditText控件并将它的ID设为e1,添加一个TextViw控件并设置它的ID为t1,添加一个Butto ...

  8. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  9. python 三角形的三个边长a,b,c ,求三角形的面积?

    已知:三角形的三个边长a,b,c ,求三角形的面积? 海伦公式: s=(a+b+c)/2 import cmath a = 3 b = 4 c = 5p = 0.5*(a+b+c) m = p*(p- ...

最新文章

  1. oracle 11g完全安装教程(CentOS)
  2. 判断输入的字符是不是数字
  3. Android系统Recovery工作原理之使用update.zip升级过程分析(五)
  4. [转] Boost智能指针——scoped_ptr
  5. 期货与期权(part8)--市场报价
  6. 【AD用户配置系列三】文件夹重定向为用户登录与注销加速
  7. POJ 3041 Asteroids (对偶性,二分图匹配)
  8. EF使用CodeFirst方式生成数据库技巧经验
  9. 杂货 - 收藏集 - 掘金
  10. 英特尔推出锐炬Xe MAX独立显卡 可提升AI及视频编码速度
  11. 机械自动化算不算计算机相关专业,机械工程及自动化属于工程类或工程经济类专业吗?...
  12. 前端使用js来获取ip起始和结束地址
  13. 视频编解码器讲解-H.264、VP9、HEVC、AV1
  14. 2021牛客暑期多校训练营10 F题: Train Wreck
  15. C语言【洛谷】P1007 独木桥
  16. python爬虫表格table_Python基于pandas爬取网页表格数据
  17. 网络创业者莱恩-福克斯:最后一分钟的奇迹
  18. 为什么高质量计算机书籍几乎都是外国人写的?
  19. java安全架构____MD5加密原理和简介
  20. 如何判断图片加载完成

热门文章

  1. 对方启用和留言是什么意思_美国人老说“How so”?到底啥意思?“怎么这样”吗?...
  2. 语音计算机音乐学猫叫,语音控制开启家庭背景音乐系统新篇章
  3. 15.(cesium之家)cesium暗色系地图样式地图(滤镜实现,反色滤镜)
  4. 解决 “ISO C++ 不允许比较指针和整数的值 “
  5. 定义电竞AI,引领数据体育-火星数据
  6. VSCode下载及安装
  7. LC3编码开源代码测试
  8. 2015年中央电大c语言,2015年电大 2015年电大小抄-中央电大2012春季c语言程序设计期末复习指导(本)资料.doc...
  9. Sentinel流量卫兵
  10. 高德地图定位 地图比例缩放