代码随想录算法训练营第六十五天 | 岛屿数量 深搜、岛屿数量 广搜、岛屿的最大面积

news2024/12/23 23:07:50

岛屿数量 深搜

题目链接:99. 岛屿数量

文字讲解:99. 岛屿数量 | 代码随想录

解题思路

本题已经说明,只有水平方向和竖直方向才能组成岛屿 

本题思路,是遇到一个没有遍历过的节点陆地,计数器就加一,然后把该节点陆地所能遍历到的陆地都标记上。 

#include<bits/stdc++.h>
using namespace std;
int dir[4][2] = {0,1,1,0,0,-1,-1,0};
void dfs(const vector<vector<int>>& grid ,vector<vector<bool>>& visited , int x, int y)
{
      if(visited[x][y] || grid[x][y] == 0)
      {
          return;    //访问过了,或者遇到海水后就返回
      }
      visited[x][y] = true;
      for(int i =0 ; i<4; i++)
      {
            int nextx = x + dir[i][0];
            int nexty = y + dir[i][1];
            int n = grid.size();
            int m = grid[0].size();
            if(nextx<0 || nextx >=n || nexty < 0 || nexty >= m)
            continue;   //如果越界了,就直接下一个
            dfs(grid,visited,nextx,nexty);
      }
}

int main()
{
    int result,n,m;
    cin>>n >> m;
    vector<vector<int>> grid(n,vector<int>(m,0));
    vector<vector<bool>> visited(n,vector<bool>(m,false));
    for(int i =0 ; i< n ; i++)
    {
        for(int j =0 ; j< m ; j++)
        {
              cin >> grid[i][j];
        }
    }
    result = 0 ;   //目前岛屿为0
    for(int i =0 ; i< n ; i++)
    {
        for(int j =0 ; j< m ; j++)
        {
              if(!visited[i][j] && grid[i][j]==1)
              {
                  //没有访问过,并且是陆地的话
                  result++;
                  dfs(grid,visited,i,j);
              }
              
        }
    }
    cout<< result << endl;
}

岛屿数量 广搜

题目链接:99. 岛屿数量

文字讲解:99. 岛屿数量 | 代码随想录

解题思路

本题的思路是一样的

但是切记,入队就是标记为访问过了,否则会重复入队,如下图

 

#include<bits/stdc++.h>
using namespace std;
int dir[4][2] = {0,1,1,0,0,-1,-1,0};
void bfs(const vector<vector<int>>& grid ,vector<vector<bool>>& visited , int x, int y)
{
      queue<pair<int,int>> que;
      que.push({x,y});
      visited[x][y] = true;   //入队就代表访问过了
      while(!que.empty())
      {
           pair<int,int> cur = que.front();
           que.pop();
           int curx = cur.first;
           int cury = cur.second;
           for(int i =0 ;i<4 ; i++)
           {
               int nextx = curx + dir[i][0];
               int nexty = cury + dir[i][1];
               int n = grid.size();
               int m = grid[0].size();
               if(nextx<0 || nextx >= n || nexty<0 || nexty >= m)
               continue;   //越界就继续
               if(!visited[nextx][nexty]  && grid[nextx][nexty] == 1)
               {
                  que.push({nextx,nexty});
                  visited[nextx][nexty] = true;
               }
           }
      }
}

int main()
{
    int result,n,m;
    cin>>n >> m;
    vector<vector<int>> grid(n,vector<int>(m,0));
    vector<vector<bool>> visited(n,vector<bool>(m,false));
    for(int i =0 ; i< n ; i++)
    {
        for(int j =0 ; j< m ; j++)
        {
              cin >> grid[i][j];
        }
    }
    result = 0 ;   //目前岛屿为0
    for(int i =0 ; i< n ; i++)
    {
        for(int j =0 ; j< m ; j++)
        {
              if(!visited[i][j] && grid[i][j]==1)
              {
                  //没有访问过,并且是陆地的话
                  result++;
                  bfs(grid,visited,i,j);
              }
              
        }
    }
    cout<< result << endl;
}

岛屿的最大面积

题目链接:100. 岛屿的最大面积
文字讲解:100. 岛屿的最大面积 | 代码随想录

解题思路

与上两题一样的思路,这里使用广搜

using namespace std;
#include <bits/stdc++.h>
int dir[4][2] = {0,1,1,0,0,-1,-1,0};
void bfs(const vector<vector<int>>& grid , vector<vector<bool>>& visited , int x , int y, int& area)
{
    queue<pair<int,int>> que;
    que.push({x,y});
    visited[x][y] = true;
    area +=1;    //第一个点也是面积
    while(!que.empty())
    {
        pair<int,int> cur = que.front();
        que.pop();
        int curx = cur.first;
        int cury = cur.second;
        for(int i=0 ; i<4; i++)
        {
            int nextx = curx + dir[i][0];
            int nexty = cury + dir[i][1];
            int n = grid.size();
            int m = grid[0].size();
            if(nextx<0 || nextx>= n || nexty < 0 || nexty >=m)
                continue;
            if(!visited[nextx][nexty] && grid[nextx][nexty]==1)
            {
                 que.push({nextx,nexty});
                 visited[nextx][nexty] = true;
                 area+=1;
            }
        }
    }
}

int main()
{
    int result = 0;
    int n,m;
    cin>>n>>m;
    vector<vector<int>> grid(n,vector<int>(m,0));
    vector<vector<bool>> visited(n,vector<bool>(m,false));
    for(int i =0 ; i<n ; i++)
    {
        for(int j =0 ;j < m; j++)
        {
             cin>>grid[i][j];
        }
    }
    for(int i =0 ; i<n ; i++)
    {
        for(int j =0 ;j < m; j++)
        {
             if(!visited[i][j] && grid[i][j]==1)
             {
                  int area = 0;
                  bfs(grid,visited,i,j,area);
                  result = max(result,area);
             }
        }
    }
    cout << result << endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1842363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【STC8A8K64D4开发板】第3-2讲:温湿度传感器DHT11

第3-2讲&#xff1a;温湿度传感器DHT11 学习目的了解DHT11数字温湿度传感器的基本原理及其数据格式。掌握STC8A8K64D4与DHT11单总线通信的程序设计&#xff0c;通信步骤&#xff0c;数据校验等。 硬件电路设计 湿敏元件简介 湿敏元件是最简单的湿度传感器。湿敏元件比较常见的…

基于GWO-CNN-LSTM数据时间序列预测(多输入单输出)-多维时间序列模型-MATLAB实现

基于GWO-CNN-LSTM数据时间序列预测(多输入单输出)-多维时间序列模型-MATLAB实现 基于灰狼优化&#xff08;Grey Wolf Optimizer, GWO&#xff09;、卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;和长短期记忆网络&#xff08;Long Short-Term Memor…

Socket编程之多进程模型

一、多进程模型概述 基于最初的阻塞网络 I/O &#xff0c;若服务器要为多个客户端提供支持&#xff0c;在较为传统的手段中&#xff0c;多进程模型是常用的选择&#xff0c;即为每个客户端都分配一个进程来处理其请求。 服务器的主进程主要负责对客户连接的监听&#xff0c;一旦…

【docker安装rabbitmq】

docker安装rabbitmq 1.查阅rabbitmq的Dokcer Hub官方说明 rabbitmq地址&#xff0c;因为我们需要使用的是带管理界面的rabbitmq服务。所以我们需要下载的rabbitmq:management镜像 docker pull rabbitmq:management2.启动rabbitmq 2.1.快速启动 One of the important thing…

Linux:配置本地yum源仓库

目录 一、挂载光盘到目录下 二、配置本地yum源仓库 一、挂载光盘到目录下 mount /dev/cdrom /mnt/ #把光盘挂载到/mnt目录下 挂载 设备 目录或文件夹 注&#xff1a;最好是空的 原来的数据将被隐藏一个挂载点同一时只能挂载一个设备。 mount /dev…

opencv中凸包运算函数convexHull()的使用

操作系统&#xff1a;ubuntu22.04OpenCV版本&#xff1a;OpenCV4.9IDE:Visual Studio Code编程语言&#xff1a;C11 1.功能描述 该函数cv::convexHull用于寻找一组二维点集的凸包&#xff0c;采用的是Sklansky算法[242]&#xff0c;当前实现中具有O(N logN)的时间复杂度。 1…

【ai】tx2-nx 查看 jetpack 版本信息及对应的tritonserver

3 jtop nvidia@tx2-nx:~$ jtop [WARN] Board missing UNKNOWN (press CTRL + Click) nvidia@tx2-nx:~$ 点击info 可以看到 jetpack是4.6opencv 是4.1.15.1.2 的不适合我 tritonserver2.35.0-jetpack5.1.2-update-2.tgz tritonserver2.19.0-jetpack4.6.1.tgz. 4.6.1<

滚动轴承振动信号异常检测方法总结(NASA-IMS轴承数据,Python)

之前的文章&#xff1a; 基于自编码器的滚动轴承异常检测方法&#xff08;NASA-IMS轴承数据&#xff0c;Python&#xff09; 基于单类支持向量机的滚动轴承异常检测方法&#xff08;NASA-IMS轴承数据&#xff0c;Python&#xff09; 基于主成分分析的滚动轴承异常检测方法&a…

Python运算符重载,代码秒变高大上!

目录 1、运算符重载基础介绍 🧮 1.1 什么是运算符重载 1.2 为何使用运算符重载 1.3 Python中的特殊方法魔法 示例:重载加法运算符 2、实战:重载加法运算符 + 🧩 2.1 自定义类与__add__() 2.2 应用案例:复数加法 2.3 深入理解__add__方法 3、重载其他运算符示例…

js实现canvas截图功能

关键代码 使用canvas的导出功能和drawImage函数 class CropShape{cropShape(shape){let {x,y,w,h} shapeconsole.log(x,y,w,h)const roiCanvas document.createElement(canvas);document.getElementById(app).append(roiCanvas)const roiCtx roiCanvas.getContext(2d);roi…

如何选择理想CDN服务商来提升网站性能

在数字时代&#xff0c;网络速度已成为衡量网站成功的关键指标之一。快速加载的网站不仅提升用户体验&#xff0c;还对网站的搜索引擎排名产生显著影响。用户期望网站能够迅速响应其请求&#xff0c;而任何延迟都可能导致用户不满和流失。研究表明&#xff0c;网站加载时间的每…

【产品经理】订单处理6-审单方案

电商系统中订单管理员会对特殊类型的订单进行审核&#xff0c;普通订单则自动审核&#xff0c;本节讲述自动审单方案、手动审单以及加急审单。 一、自动审单 自动审单方案可按照方案形式制定&#xff0c;可一次性制定多套审单方案。 1. 审单通过条件有 执行店铺&#xff…

Python爬虫实战:淘宝商品爬取与数据分析

一、爬虫技术概述 爬虫技术是一种在互联网上自动收集信息的方法。通过编写程序&#xff0c;让计算机自动访问网站&#xff0c;获取所需数据&#xff0c;并进行分析和处理。Python作为一种功能强大、易于学习的编程语言&#xff0c;其爬虫库Scrapy更是爬虫技术的利器。 二、淘…

段码屏省电低功耗驱动芯片PC164S32|128点阵|低功耗LCD屏专用芯片

1 简介 PC164S32 是一款支持 128 点 (32 4)显示 的多功能 LCD 控制器芯片&#xff0c;内部存储器RAM数据直接映射到 LCD 显示。可软件配置特性使其适用于包括 LCD 模块和显示子系统在内的多种 LCD 应用。主控制器与 PC164S32接口仅需3 或 4 条线。内置的省电模式极大的降低了功…

LangChain入门到精通,看这这篇吊打面试官

导语 在人工智能领域的不断发展中&#xff0c;语言模型扮演着重要的角色。特别是大型语言模型&#xff08;LLM&#xff09;&#xff0c;如ChatGPT&#xff0c;已经成为科技领域的热门话题&#xff0c;并受到广泛认可。在这个背景下&#xff0c;LangChain作为一个以LLM模型为核…

深度学习1 -- 开头

一 前言 感觉用这玩意越来越多&#xff0c;所以想学学。不过没想好怎么学&#xff0c;也没有提纲&#xff0c;买了两本书&#xff0c;一本是深度学习入门&#xff0c;小日子写的。还有一本就是花书。还有就是回Gatech参加线上课程&#xff0c;CS7643。 CS 7643: Deep Learnin…

ps 科研图文字变清晰

目录 网站 PS 网站 AI照片修复神器&#xff0c;一键模糊图片变清晰 (picwish.cn) PS 用PS快速将一张模糊不清晰的照片变清晰&#xff0c;简单5步就好 - 知乎 (zhihu.com) CrtlJ 滤镜 其他 高反差 半径调2 叠加

【机器学习300问】128、简述什么Word2Vec?

一、一句话说明Word2Vec是什么&#xff1f; Word2Vec是一种常见的词嵌入技术。Word2Vec的目标是将每个词表示为一个向量&#xff0c;使得这些向量能够反映出词语之间的相似性和关联性。 word2vec算法通过预测中心词和上下文词的共现概率来学习词向量&#xff0c;能够捕捉词语之…

LeetCode 338.比特位计数

各位朋友们&#xff0c;大家好啊&#xff0c;今天此题我用的方法比较好理解&#xff0c;但时间复杂度比较高如果大家觉得可以的话&#xff0c;不妨给个免费的赞吧&#xff0c;谢谢了^ _ ^ 1.题目要求如图所示: 2.做题步骤: 1.先计算总共多少个数: int count 0;int number 0;…

二叉树(数据结构篇)

数据结构之二叉树 二叉树 概念&#xff1a; 二叉树(binary tree)是一颗每个节点都不能多于两个子节点的树&#xff0c;左边的子树称为左子树&#xff0c;右边的子树称为右子树 性质&#xff1a; 二叉树实际上是图&#xff0c;二叉树相对于树更常用。 平衡二叉树的深度要比…