一个矩阵中只有0和1两种值,每个位置都可以和自己的上、下、左、右四个位置相连,如果有一片1连在一起,这个部分叫做一个岛,求一个矩阵中有多少个岛?

public class Islands {public static int Islands(int[][] arr) {int land = 0;int line = arr[0].length;int row = arr.length;for (int i = 0; i < row; i++) {for (int j = 0; j < line; j++) {if (arr[i][j] == 1) {G_do(arr, i, j);land++;}}}return land;}public static void G_do(int[][] arr, int row, int line) {if (row < 0 || row >= arr.length || line < 0 || line >= arr[0].length || arr[row][line] != 1) {return;}arr[row][line] = 2;G_do(arr, row + 1, line);G_do(arr, row - 1, line);G_do(arr, row, line + 1);G_do(arr, row, line - 1);}public static void main(String[] args) {int[][] m1 = {  { 0, 0, 0, 0, 0, 0, 0, 0, 0 },{ 0, 1, 1, 1, 0, 1, 1, 1, 0 },{ 0, 1, 1, 1, 0, 0, 0, 1, 0 },{ 0, 1, 1, 0, 0, 0, 0, 0, 0 },{ 0, 0, 0, 0, 0, 1, 1, 0, 0 },{ 0, 0, 0, 0, 1, 1, 1, 0, 0 },{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, };System.out.println(Islands(m1));int[][] m2 = {  { 0, 0, 0, 0, 0, 0, 0, 0, 0 },{ 0, 1, 1, 1, 1, 1, 1, 1, 0 },{ 0, 1, 1, 1, 0, 0, 0, 1, 0 },{ 0, 1, 1, 0, 0, 0, 1, 1, 0 },{ 0, 0, 0, 0, 0, 1, 1, 0, 0 },{ 0, 0, 0, 0, 1, 1, 1, 0, 0 },{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, };System.out.println(Islands(m2));}
}

解题思路就是整体是一个双循环嵌套,按顺序遍历,如果遇到1,进入到G病毒函数中,函数进行疯狗一样递归查找周围有1的岛,找到都标记为2。每进一个G病毒,那么岛数一定是+1。这样循环一遍就得到了岛数。

假如说数据量特别大,矩阵特别大,可以使用多任务同时处理。将矩阵分成几个小的版块,然后每个CPU负责一个版块,最后再利用交并集计算边界,合并一起得到岛的个数。

算法----------海岛个数问题相关推荐

  1. kmeans中的k的含义_聚类分析:kmeans 算法簇个数的确定

    kmeans算法是无监督聚类学习中最常见.最常用的算法之一,其基本原理如下: 1.随机初始化k个聚类中心点,并计算数据中每个点到k个点的距离: 2.将每个数据点分到距离聚类中心点最近的聚类中心中: 3 ...

  2. 算法---------两个数的交集

    两个数组的交集 给定两个数组,编写一个函数来计算它们的交集.示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2:输入: nums1 = [4, ...

  3. 零起点学算法 3个数比较大小

    输入3个整数,将它们从大到小输出.思路提示:假设输入a b c三个数,可以先找出最大数和a交换,确保a最大: 然后剩下两数中找出最大数和b交换,确保b最大:剩下的c就是最小数:输出a b c就是从大到 ...

  4. Java 算法 约数个数

    目录标题 题目描述 解题思路 代码 题目描述 有1个约数的最小数为1(1),有两个约数的最小数为2(1,2)-- 有n个约数的最小数为Sn S1=1 (1) S2=2 (1 2) S3=4 (1 2 ...

  5. 算术平均值滤波matlab程序,基于S7-1200 AD采样的高效数字滤波算法的设计与实践...

    在工业控制中,常常会伴随大量的模拟量数据采样.模拟量采样时,由于待采量本身.传感器和传输过程中的外界干扰,特别是非稳态干扰信号等因素的影响,采样值中通常含有各种周期性和非周期性的噪声和干扰.为得到稳定 ...

  6. K近邻算法 模拟sklearn调用 自定义优化Knn算法模型 ---完整代码

    通过函数与欧拉距离公式实现Knn算法,再调用我们的py文件实现模拟 1.首先设置好欧拉距离公式计算个点之间距离的函数,收集它们的距离. import numpy as np import math f ...

  7. 深度学习算法和机器学习算法_63种机器学习算法介绍

    深度学习算法和机器学习算法 Data Science and analytics are transforming businesses. It has penetrated into all dep ...

  8. 基于卷积神经网络的密集人群估计/人群计数算法【内含教程和踩坑】

    文章目录 前言 一.什么是密集人群估计 二.实验前准备 1.Github开源项目--Awesome Crowd Counting 2.数据集下载 3.环境配置 三.ShanghaiTech数据集实验 ...

  9. 数据结构和算法基本概念

    文章目录 什么是数据结构? 数据 数据元素 数据结构 数据之间的结构关系 逻辑结构 1.特点 2.分类 存储结构 顺序存储 链式存储 什么是算法? 算法的特性 评价算法好坏的方法 时间复杂度 大O的渐 ...

最新文章

  1. vue webpack打包入口文件是哪个_Vue项目起步
  2. Keil C语言数据类型,KeilC的指针类型
  3. Java2021中级面试题
  4. RDS for MySQL 5.7 备份恢复为本地实例
  5. iOS:使用集成的支付宝SDK的支付流程
  6. 测试Robotium
  7. burpsuite collaborato模块简介 dns log、http_https log、smtp_smtps log
  8. C# Win32 API 应用
  9. Algorithm:数学建模大赛(国赛和美赛)的简介/内容、数学建模做题流程、历年题目类型及思想、常用算法、常用工具之详细攻略
  10. VTK:PolyData之CellTreeLocator
  11. django设置paypal支付如何获取signature
  12. 数据结构与算法python描述_数据结构与算法——Python语言描述.pdf
  13. 千万不要被这些手机充电的谣言给误导了!现在了解还来得及
  14. WF4.0实战(九):猜数字游戏,测下你的智力
  15. 云服务器在哪里创建网站目录,如何在云服务器创建根目录
  16. 计算机网络-自顶向下方法(7th) 第一章 Problems 中英对照
  17. 评委输入的密码如果不正确,当错误的次数达到5次时,该评委的账号会被锁定.如何解锁呢?
  18. GDI+ 保存HDC为位图文件
  19. 变更DirectX SDK版本-DirectX8升级DirectX9
  20. 除了QQ就是一塌糊涂的日子不会再有了

热门文章

  1. android的onKeyDown方法,Android:拦截onKeyDown()和onKeyUp()
  2. 学生的姓名 ,年龄,性别,班级及爱好IDEA代码
  3. 关于ECMA、ECMAScript、TC39、ES、Stage等概念的科普
  4. linux将h264文件转化为flv文件
  5. SDK 下载错误 , simply set anenvironment variable JAVA_ HOME to point toit.
  6. 真机调试adb:wait for device 解决方案
  7. hdu 2013 蟠桃记(c语言)
  8. 小傻羊7.31学习笔记——AOP例子和日志的实现实例
  9. When You Know-Hooverphonic, 芝华士广告歌完整版
  10. python 分割字串_在Python中分割,连结和连结字串