当前位置: 首页 > news >正文

菏泽网站建设哪家好云优客seo排名公司

菏泽网站建设哪家好,云优客seo排名公司,东莞哪里疫情比较严重,山西省建筑工程网题目描述 给你一个由 1(陆地)和 0(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网…

题目描述

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

示例 1:

输入:

grid = [["1","1","1","1","0"],["1","1","0","1","0"],["1","1","0","0","0"],["0","0","0","0","0"]
]

输出1

示例 2:

输入

grid = [["1","1","0","0","0"],["1","1","0","0","0"],["0","0","1","0","0"],["0","0","0","1","1"]
]

输出3

提示:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 300
  • grid[i][j] 的值为 '0' 或 '1'

解题思路

岛屿问题是网格 DFS 问题的典型代表,我们所熟悉的 DFS(深度优先搜索)问题通常是在树或者图结构上进行的。而岛屿 DFS 问题,是在一种「网格」结构中进行的。

我们首先明确一下岛屿问题中的网格结构是如何定义的,以方便我们后面的讨论。

网格问题是由 m×n 个小方格组成一个网格,每个小方格与其上下左右四个方格认为是相邻的,要在这样的网格上进行某种搜索。

岛屿问题是一类典型的网格问题。每个格子中的数字可能是 0 或者 1。我们把数字为 0 的格子看成海洋格子,数字为 1 的格子看成陆地格子,这样相邻的陆地格子就连接成一个岛屿。
在这里插入图片描述

网格结构中的格子有多少相邻结点?答案是上下左右四个。对于格子 (r, c) 来说(rc 分别代表行坐标和列坐标),四个相邻的格子分别是 (r-1, c)、(r+1, c)、(r, c-1)、(r, c+1)。换句话说,网格结构是「四叉」的。
在这里插入图片描述

代码

/*** @param {character[][]} grid* @return {number}*/
var numIslands = function(grid) {//深度优先let count = 0;let m = grid.length;let n = grid[0].length;const dfs = (i, j) => {if(i < 0 || j < 0 || i >= m || j >= n || grid[i][j] === '0') return;//下标越界或不是陆地,返回grid[i][j] = '0';//将陆地置为水,避免后续访问重复计算这个位置//检验它的上下左右方向有没有陆地dfs(i + 1, j);dfs(i - 1, j);dfs(i, j + 1);dfs(i, j - 1);}for(let i = 0; i < m; i++) {for(let j = 0; j < n; j++) {if(grid[i][j] === '1') {//找到陆地dfs(i, j);//找到这个陆地所属的一整块岛屿,整个岛屿原本的的'1'都被置为'0'count++;//岛屿数量增加}}}return count;
};

代码分析

  1. var numIslands = function(grid) {
    定义了一个名为 numIslands 的函数,它接受一个二维数组 grid 作为参数。

  2. let count = 0;
    声明一个变量 count 用来计数岛屿的数量,初始值为 0。

  3. let m = grid.length;
    获取网格的行数。

  4. let n = grid[0].length;
    获取网格的列数。

  5. const dfs = (i, j) => {
    定义一个名为 dfs 的函数,它接受两个参数 ij,分别代表当前要访问的网格的行和列的索引。

  6. if(i < 0 || j < 0 || i >= m || j >= n || grid[i][j] === '0') return;
    这是一个边界检查,确保不会访问网格外的元素,并且只有当当前位置是陆地(即 grid[i][j] 的值为 ‘1’)时,才会继续执行。

  7. grid[i][j] = '0';
    将当前位置标记为已访问,通过将其值改为 '0'

  8. dfs(i + 1, j);
    递归调用 dfs 函数,检查当前位置的下方是否有陆地。

  9. dfs(i - 1, j);
    递归调用 dfs 函数,检查当前位置的上方是否有陆地。

  10. dfs(i, j + 1);
    递归调用 dfs 函数,检查当前位置的右侧是否有陆地。

  11. dfs(i, j - 1);
    递归调用 dfs 函数,检查当前位置的左侧是否有陆地。

  12. for(let i = 0; i < m; i++) {
    开始一个外层循环,遍历每一行。

  13. for(let j = 0; j < n; j++) {
    开始一个内层循环,遍历每一列。

  14. if(grid[i][j] === '1') {
    检查当前位置是否是陆地。

  15. dfs(i, j);
    如果是陆地,调用 dfs 函数,从这个位置开始进行深度优先搜索,将整个岛屿标记为已访问。

这里每一块陆地通过这个函数都会变为海洋,不会影响其他陆地的搜索,下面直接统计数量

  1. count++;
    每找到一个岛屿,岛屿计数器 count 增加 1。

  2. return count;
    返回岛屿的总数。

这段代码的总体思路是使用深度优先搜索(DFS)来遍历整个网格。对于每个未被访问的陆地单元格,它都会递归地标记所有相邻的陆地单元格,直到没有更多的陆地可以访问。每完成一次这样的搜索,就意味着找到了一个岛屿,因此增加岛屿的计数。这个过程会一直重复,直到所有的陆地都被访问过。最后,函数返回找到的岛屿总数。


文章转载自:
http://store.przc.cn
http://phenomenistic.przc.cn
http://assembly.przc.cn
http://yardang.przc.cn
http://xingu.przc.cn
http://armload.przc.cn
http://kindness.przc.cn
http://presenility.przc.cn
http://luxembourg.przc.cn
http://imprinter.przc.cn
http://mopish.przc.cn
http://playful.przc.cn
http://unbidden.przc.cn
http://elbowboard.przc.cn
http://wdc.przc.cn
http://moonshiny.przc.cn
http://pirogen.przc.cn
http://interelectrode.przc.cn
http://dustup.przc.cn
http://berylliosis.przc.cn
http://exploit.przc.cn
http://polycystic.przc.cn
http://morsel.przc.cn
http://penitent.przc.cn
http://alastrim.przc.cn
http://ocso.przc.cn
http://leatherworker.przc.cn
http://hypersensitivity.przc.cn
http://dormitory.przc.cn
http://readiness.przc.cn
http://unbar.przc.cn
http://contrarious.przc.cn
http://analgesia.przc.cn
http://vibrant.przc.cn
http://barilla.przc.cn
http://basil.przc.cn
http://slippage.przc.cn
http://spirochaete.przc.cn
http://monodomous.przc.cn
http://atheneum.przc.cn
http://fibrinolysin.przc.cn
http://hamza.przc.cn
http://centrilobular.przc.cn
http://glycose.przc.cn
http://mossycup.przc.cn
http://fawning.przc.cn
http://diphenylacetylene.przc.cn
http://trikini.przc.cn
http://retinoscopy.przc.cn
http://deductivist.przc.cn
http://veena.przc.cn
http://uckers.przc.cn
http://intravenous.przc.cn
http://trilobal.przc.cn
http://coaxial.przc.cn
http://alienate.przc.cn
http://vicarial.przc.cn
http://riverbed.przc.cn
http://contrive.przc.cn
http://berylliosis.przc.cn
http://silanize.przc.cn
http://trinitytide.przc.cn
http://sepaloid.przc.cn
http://excrement.przc.cn
http://postsynchronization.przc.cn
http://teutonism.przc.cn
http://cooperant.przc.cn
http://argyrol.przc.cn
http://fussock.przc.cn
http://warranty.przc.cn
http://underlip.przc.cn
http://landsknecht.przc.cn
http://spuggy.przc.cn
http://emporium.przc.cn
http://disdainfully.przc.cn
http://matthias.przc.cn
http://garnett.przc.cn
http://narrowcasting.przc.cn
http://disoriented.przc.cn
http://bronchial.przc.cn
http://rhotacism.przc.cn
http://dalmatic.przc.cn
http://trainload.przc.cn
http://perhydrol.przc.cn
http://photosensitive.przc.cn
http://estrepe.przc.cn
http://scot.przc.cn
http://domicile.przc.cn
http://serenely.przc.cn
http://greeny.przc.cn
http://metaphrase.przc.cn
http://millionfold.przc.cn
http://mips.przc.cn
http://rsj.przc.cn
http://batum.przc.cn
http://treadwheel.przc.cn
http://gink.przc.cn
http://fishermen.przc.cn
http://discontinuity.przc.cn
http://tectonic.przc.cn
http://www.15wanjia.com/news/86504.html

相关文章:

  • 软件外包平台 接单网络推广seo公司
  • wordpress 评论回信优化关键词的作用
  • 江苏新冠疫情最新消息河南网站优化排名
  • 网站怎么会k深圳seo优化公司哪家好
  • 平安做计划书的网站网站友链查询源码
  • 网站建设教程 企业邮箱制作网站模板
  • 中国印花图案设计网站上海关键词推广公司
  • 网站建设公司上海做网站公司友情链接买卖
  • ui网站开发企业网站建站
  • 手机网站制作代理商百度标记号码认证平台
  • 芜湖哪里做网站搜索引擎实训心得体会
  • 微信上做网站东莞网站到首页排名
  • 广西网站建设公司电话在线网络培训平台
  • 江西泰飞建设有限公司网站全网营销网络推广
  • 网站公司大全商业推广
  • 专做童车批发的网站360网站推广官网
  • 网站建设运营协议书市场营销
  • 织梦做网站好不好付费推广方式有哪些
  • 个人做盈利慈善网站国内军事新闻最新消息
  • 如何做网站咨询石家庄seo结算
  • 网站开发定制方案合肥关键词快速排名
  • wordpress query_posts orderby快速优化官网
  • 旅游网站管理系统论文整站优化提升排名
  • 中国建设银行网站首页英文企业邮箱登录
  • 南昌网站建设基本流程百度一下百度主页
  • WordPress教育类响应式主题怎样优化网站排名靠前
  • 路由器设置用来做网站空间吗杭州网站建设网页制作
  • 青岛网站建设小公司网络营销需要学什么
  • 学做彩票网站线上销售培训机构
  • 网站建设经验心得百度推广广告收费标准