DFS求岛屿最大面积
求岛屿最大面积
- 题目
- 源代码
- 结果
- 解释
题目
给定一个包含了一些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求岛屿最大面积相关推荐
- 求岛屿的最大面积java
求岛屿的最大面积 给定一个包含了一些 0 和 1 的非空二维数组 grid . 一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻.你可 ...
- 【算法题目】【DFS】岛屿数量 岛屿中面积最大值
1岛屿数量 题目很好理解,dfs来一套即可: (1)二维的,没考虑特殊情况: (2)对每个网格dfs,每次dfs往上下左右搜 (3)grid是list,在python里面会是一个全局,第一次搜到记一次 ...
- 岛屿问题和昆虫越障问题以及岛屿最大面积
岛屿问题 题目地址:https://leetcode-cn.com/problems/number-of-islands/submissions/ package A.giao;public clas ...
- LeetCode岛屿最大面积
695. 岛屿的最大面积 给你一个大小为 m x n 的二进制矩阵 grid . 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻 ...
- YTU 2723: 默认参数--求圆的面积
2723: 默认参数--求圆的面积 时间限制: 1 Sec 内存限制: 128 MB 提交: 206 解决: 150 题目描述 根据半径r求圆的面积, 如果不指定小数位数,输出结果默认保留两位小数 ...
- P5357 【模板】AC自动机(二次加强版)(AC自动机建fail树dfs求模式串出现次数)
P5357 [模板]AC自动机(二次加强版)(AC自动机建fail树dfs求模式串出现次数) 传送门 形式上,AC 自动机基于由若干模式串构成的 Trie 树,并在此之上增加了一些 fail 边:本质 ...
- Android 求圆的面积
计算机应用112班 孔秋静 在Android中实现求圆的面积. 在Layout 中添加一个EditText控件并将它的ID设为e1,添加一个TextViw控件并设置它的ID为t1,添加一个Butto ...
- 求三角形最大面积(DP)
求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...
- 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- ...
最新文章
- oracle 11g完全安装教程(CentOS)
- 判断输入的字符是不是数字
- Android系统Recovery工作原理之使用update.zip升级过程分析(五)
- [转] Boost智能指针——scoped_ptr
- 期货与期权(part8)--市场报价
- 【AD用户配置系列三】文件夹重定向为用户登录与注销加速
- POJ 3041 Asteroids (对偶性,二分图匹配)
- EF使用CodeFirst方式生成数据库技巧经验
- 杂货 - 收藏集 - 掘金
- 英特尔推出锐炬Xe MAX独立显卡 可提升AI及视频编码速度
- 机械自动化算不算计算机相关专业,机械工程及自动化属于工程类或工程经济类专业吗?...
- 前端使用js来获取ip起始和结束地址
- 视频编解码器讲解-H.264、VP9、HEVC、AV1
- 2021牛客暑期多校训练营10 F题: Train Wreck
- C语言【洛谷】P1007 独木桥
- python爬虫表格table_Python基于pandas爬取网页表格数据
- 网络创业者莱恩-福克斯:最后一分钟的奇迹
- 为什么高质量计算机书籍几乎都是外国人写的?
- java安全架构____MD5加密原理和简介
- 如何判断图片加载完成
热门文章
- 对方启用和留言是什么意思_美国人老说“How so”?到底啥意思?“怎么这样”吗?...
- 语音计算机音乐学猫叫,语音控制开启家庭背景音乐系统新篇章
- 15.(cesium之家)cesium暗色系地图样式地图(滤镜实现,反色滤镜)
- 解决 “ISO C++ 不允许比较指针和整数的值 “
- 定义电竞AI,引领数据体育-火星数据
- VSCode下载及安装
- LC3编码开源代码测试
- 2015年中央电大c语言,2015年电大 2015年电大小抄-中央电大2012春季c语言程序设计期末复习指导(本)资料.doc...
- Sentinel流量卫兵
- 高德地图定位 地图比例缩放