首页 > 其他分享 >200.岛屿数量

200.岛屿数量

时间:2024-11-30 16:02:48浏览次数:4  
标签:陆地 200 int 岛屿 grid 数组 y1 数量

给你一个由 '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

思路:本题的要求是求有多少个岛屿,字符‘1’表示陆地,上下左右相邻的陆地是同一块岛屿,因此求解该题的方法就是遍历该二维数组,一旦遇到‘1’,就以这块陆地为基准,通过宽度搜索方法,把所有相邻的陆地都找出来,这就是一个岛屿记录下来,为了防止重复搜索,每次找到陆地后都将其值从‘1’变为‘0’。

在本题中通过宽度搜索方法求解需要用队列queue进行临时存储遍历数组遇到的第一个陆地‘1’,通过while循环,每次将队列中的大陆取出,将其值改为'0',并判断其上下左右是否有相邻的陆地,有则插入队列中。知道队列为空时退出循环,继续遍历二维数组。

代码如下:

class Solution {
public:
    struct position{//用于记录陆地位置的结构体
        int a,b;
    };
    int numIslands(vector<vector<char>>& grid) {
        int n=grid.size(),m=grid[0].size();//记录二维数组有几行几列
        int x[]={-1,1,0,0};//这两个数组是用来移动陆地查看其上下左右是否有陆地
        int y[]={0,0,-1,1};
        int number=0;//用于记录岛屿个数
        queue<position> que;//用于宽度搜索
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(grid[i][j]=='0'){//若遍历的不是陆地则结束本次循环进入下一次循环
                    continue;
                }
                else{
                    que.push({i,j});//若是陆地则向队列中插入该陆地的位置
                    number++;//岛屿数量加一
                    grid[i][j]='0';//将该值改为'0',防止重复记录
                    while(!que.empty()){//进行宽度搜索
                        position temp=que.front();//取出陆地位置
                        que.pop();
                        for(int k=0;k<4;k++){//查看该陆地位置上下左右四个方向上是否有相邻的位置
                            int x1=temp.a+x[k];
                            int y1=temp.b+y[k];
                            if(x1<0||x1>=n||y1<0||y1>=m){//判断是否越界
                                continue;
                            }
                            if(grid[x1][y1]=='0'){//判断是否是陆地
                                continue;
                            }
                            else{
                                grid[x1][y1]='0';
                                que.push({x1,y1});
                            }
                        }
                    }
                }
            }
        }
        return number;
    }
};

标签:陆地,200,int,岛屿,grid,数组,y1,数量
From: https://blog.csdn.net/2401_84164461/article/details/144141789

相关文章

  • 【工具变量】中国省级农村创业活跃度数据(2000-2022年)
    一、测算方式:参考《金融与经济》黄敦平(2023)老师研究的做法,农村创业活跃度(REP)利用农村私营企业就业人数和个体就业人数之和与乡村人口总数的比重衡量农村创业活跃度,该比值越大,创业活跃度越高。二、数据范围:省级数据三、包含指标:具体指标为行政区划代码      地区  ......
  • Y20030016 基于PHP+MySQL的网上鲜花销售系统商城网站的设计与实现 源码 PPT 论文
    鲜花销售商城系统1.摘要2.开的发背景和意义3.项目功能结构4.界面展示5.源码获取1.摘要在互联网迅速发展的今天,网上购物已经是人们日常生活所不可缺少的消费渠渠道,人们日常生活基本已完全被网络所覆盖,互联网影响到各行各业,同时也为各大商家或企业提供了一个很好的......
  • 岛屿数量习题分析
    习题:(leetcode200)给你一个由'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。分析:使用方法为DFS,将遇到的“岛屿”更改为0,表示已探......
  • 【西门子S200驱动器】一文包含所有资源,全部干货,速收藏
    概述本文为大家汇总了全新版本的资料链接,内容涵盖:S200文件及手册,包括:产品样本、操作手册、固件、产品认证文件及调试软件等下载链接S200跟我学系列视频课程链接S200常问问题汇总S200常用功能操作指南S200微信推文链接1.文件、手册下载1.1产品操作手册SINAM......
  • FANUCR2000iB发那科机器人保养有哪些
     1.机器人保养的重要性 机器人都需要预防性保养,这样可以保证它们在生产线上保持最佳性能和实现一致性。当机器人没有进行定期的预防性保养检查,可能会导致零部件损坏或故障,从而致使生产放慢甚至停机。对机器人的正确保养可能会延长其寿命多年甚至数十年,定期进行预防性机器人保......
  • 代码随想录算法训练营第三十天|leetcode452. 用最少数量的箭引爆气球、leetcode435.
    1leetcode452.用最少数量的箭引爆气球题目链接:452.用最少数量的箭引爆气球-力扣(LeetCode)文章链接:代码随想录视频链接:贪心算法,判断重叠区间问题|LeetCode:452.用最少数量的箭引爆气球_哔哩哔哩_bilibili思路:有方法了,但是呢不知道怎么往后写,就是先找到对起始位置按照从小......
  • 204 [SCOI2005] 互不侵犯
    //204[SCOI2005]互不侵犯.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*http://oj.daimayuan.top/course/22/problem/901在......
  • Y20030009基于Java+springboot+MySQL+uniapp框架的待办事项提醒微信小程序的设计与实
    待办事项提醒小程序1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取1.摘要随着现代人的工作和生活压力越来越大,人们的精力和时间也越来越有限。在这样的情况下,很容易忘记一些很重要的行程,有时会导致严重的后果,如何处理好自己的待办事项,便成为了一个需......
  • Y20030012基于php+mysql的药店药品信息管理系统的设计与实现 源码 配置 文档
    库存管理系统1.摘要2.系统功能3.功能结构图4.界面展示5.源码获取1.摘要21世纪是信息的时代,信息技术发展突飞猛进。各种信息化管理系统如雨后春笋一样出现。Internet的迅猛发展使其成为全球信息传递与共享的巨大的资源库。越来越多的网络环境下的Web应用系统被建立起......
  • P4408 [NOI2003] 逃学的小孩 —— 树的直径
    [NOI2003]逃学的小孩题目描述Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:“喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?”一听说要考试,Chris的父母就心急如焚,他们决定在尽量短的时间内找到Chris。他们告诉Chris的老师:“根据以往的经验,Chris现......