第六十五天打卡 | 卡码网 99 岛屿数量(深搜版)、卡码网 99 岛屿数量(广搜版)、卡码网 100 岛屿的最大面积

卡码网 99 岛屿数量(深搜版)


基本就是回溯算法 翻版了

#include <iostream>
#include <vector>using namespace std;int dir[4][2] = {-1, 0, 1, 0, 0, 1, 0, -1};void dfs(vector<vector<int>>& grid, vector<vector<int>>& visited, int i_index, int j_index) {if (!grid[i_index][j_index] || visited[i_index][j_index]) return;visited[i_index][j_index] = 1;for (int i = 0; i < 4; i++) {if (i_index + dir[i][0] >= 0 && i_index + dir[i][0] < grid.size()) {if (j_index + dir[i][1] >= 0 && j_index + dir[i][1] < grid[0].size()) {dfs(grid, visited, i_index + dir[i][0], j_index + dir[i][1]);}}}
}int main() {int n, m;cin >> n >> m;vector<vector<int>> grid(n, vector<int>(m, 0));vector<vector<int>> visited(n, vector<int>(m, 0));int num = 0; 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 (grid[i][j] && !visited[i][j]) {num++;dfs(grid, visited, i, j);}}}cout << num << endl;return 0;
}

卡码网 99 岛屿数量(广搜版)


类比二叉树层序遍历可以由上面的代码修改得到

#include <iostream>
#include <vector>
#include <queue>
using namespace std;int dir[4][2] = {-1, 0, 1, 0, 0, 1, 0, -1};void bfs(vector<vector<int>>& grid, vector<vector<int>>& visited, int i_index, int j_index) {queue<pair<int, int>> que;que.push(pair<int, int>(i_index, j_index));while (!que.empty()) {// int num = que.size();// while (num--) {i_index = que.front().first;j_index = que.front().second;for (int i = 0; i < 4; i++) {if (i_index + dir[i][0] >= 0 && i_index + dir[i][0] < grid.size()) {if (j_index + dir[i][1] >= 0 && j_index + dir[i][1] < grid[0].size()) {if (grid[i_index+dir[i][0]][j_index+dir[i][1]] && !visited[i_index+dir[i][0]][j_index+dir[i][1]]) {visited[i_index+dir[i][0]][j_index+dir[i][1]] = 1;que.push(pair<int, int>(i_index+dir[i][0],j_index+dir[i][1]));}}}}   que.pop();// }}
}int main() {int n, m;cin >> n >> m;vector<vector<int>> grid(n, vector<int>(m, 0));vector<vector<int>> visited(n, vector<int>(m, 0));int num = 0; 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 (grid[i][j] && !visited[i][j]) {num++;visited[i][j] = 1;bfs(grid, visited, i, j);}}}cout << num << endl;return 0;
}

卡码网 100 岛屿的最大面积


加了if语句后很神奇地会出问题,改用max,可能判断语句优先级比bfs函数内部执行优先级要高,采用max函数就能解决这个问题

代码如下:

#include <iostream>
#include <vector>
#include <queue>
using namespace std;int dir[4][2] = {-1, 0, 1, 0, 0, 1, 0, -1};int bfs(vector<vector<int>>& grid, vector<vector<int>>& visited, int i_index, int j_index) {int sum = 0;queue<pair<int, int>> que;que.push(pair<int, int>(i_index, j_index));while (!que.empty()) {// int num = que.size();// while (num--) {i_index = que.front().first;j_index = que.front().second;for (int i = 0; i < 4; i++) {if (i_index + dir[i][0] >= 0 && i_index + dir[i][0] < grid.size()) {if (j_index + dir[i][1] >= 0 && j_index + dir[i][1] < grid[0].size()) {if (grid[i_index+dir[i][0]][j_index+dir[i][1]] && !visited[i_index+dir[i][0]][j_index+dir[i][1]]) {visited[i_index+dir[i][0]][j_index+dir[i][1]] = 1;sum++;que.push(pair<int, int>(i_index+dir[i][0],j_index+dir[i][1]));}}}}   que.pop();// }}return sum + 1;
}int main() {int n, m;cin >> n >> m;vector<vector<int>> grid(n, vector<int>(m, 0));vector<vector<int>> visited(n, vector<int>(m, 0));int sum = 0; 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 (grid[i][j] && !visited[i][j]) {visited[i][j] = 1;// if (sum < bfs(grid, visited, i, j))sum = max(sum, bfs(grid, visited, i, j));// cout << sum << endl;}}}cout << sum << endl;return 0;
}

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

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

相关文章

如何有效管理信息技术课堂

有效管理信息技术课堂是确保学生学习效果、维护课堂秩序和提升学生兴趣的关键。以下是一些详细的方法和策略&#xff0c;旨在帮助教师更好地管理信息技术课堂&#xff1a; 一、制定明确的课堂规则 强调课堂纪律&#xff1a;确保学生明确了解并遵守课堂纪律&#xff0c;如准时…

ROS2学习资源

2024.6.21 快放暑假了&#xff01;简单计划一下暑假的学习内容。 首先是ROS2&#xff0c;学习资源&#xff1a; 官方文档&#xff1a;ROS 2 Documentation — ROS 2 Documentation: Humble documentation B站赵虚左老师的教程&#xff1a; ROS2理论与实践_哔哩哔哩_bilibil…

long long ago

一、long 众所周知&#xff0c;英文单词 long&#xff0c;表示长,长的。 但是&#xff0c;还有很多你不知道到的东西&#xff0c;根据英文单词首字母象形原则&#xff0c;我们可以做一下单词long结构分析&#xff1a; long l长 ong长 什么意思&#xff1f;就是说首字线 l…

H3C路由器密码恢复方法

H3C的路由器需要先关闭电源&#xff0c;重新启动路由器&#xff0c;注意终端上显示 press CTRLB to enter extended boot menu 的时候&#xff0c;请迅速按下ctrlB&#xff0c;这样将进入扩展启动选项。接着&#xff0c;你就可以进入路由器视图&#xff1a; 1.低端H3C设备 重启…

英语(1)-读音规则-连读-失去爆破

元音&#xff1a; a ,e ,i ,o, u 发音气流不受阻 辅音&#xff1a;b c d f g h j k l m n p q r s t v w x y z 发音气流受阻 爆破音&#xff1a;完全阻断气流并随之释放产生 清音&#xff1a;p t k 浊音&#xff1a;b d g 1.连读&#xff1a; 11.辅音元…

Javascript高级程序设计(第四版)--学习记录

var关键字&#xff1a;定义变量同时可以进行赋值 var message"hello" message 10 可以改变保存的值&#xff0c;也可以改变值的类型&#xff0c;但是不推荐这样写。 var声明的变量会成为包含它的函数的局部变量。 function test(){ var message "hello";…

STM32 I2C总线锁死原因及解决方法

本文介绍STM32 I2C总线锁死原因及解决方法。 在使用STM32 I2C总线操作外设时&#xff0c;有时会遇到I2C总线锁死&#xff08;I2C总线为Busy状态&#xff09;的问题&#xff0c;即便复位MCU也无法解决&#xff0c;本文介绍其锁死的原因和解决方法&#xff0c;并给出相应的参考代…

pdf转图片转换器,pdf转图片的工具

在日常的工作和学习中&#xff0c;我们经常会遇到需要将PDF文件转换为图片格式的情况。那么&#xff0c;如何才能将PDF格式转换为图片格式呢&#xff1f;今天&#xff0c;我将为大家介绍几种简单易用的方法&#xff0c;帮助大家轻松实现PDF转图片。 打开“轻云pdf处理官网网站”…

deepin 加入甲辰计划,共建 RISC-V 繁荣生态

内容来源&#xff1a;deepin&#xff08;深度&#xff09;社区 今日&#xff0c;deepin(深度)社区宣布正式加入甲辰计划&#xff0c;致力于在下一个丙辰年&#xff08;2036龙年&#xff09;之前&#xff0c;基于RISC-V实现从数据中心到桌面办公、从移动穿戴到智能物联网全信息产…

【廉颇老矣,尚能饭否】传统的数据仓库是否还能发挥作用?

引言&#xff1a;随着数字化转型的深入和大数据技术的发展&#xff0c;大数据平台、数据中台和和数据湖技术不断涌现&#xff0c;给人感觉传统的数据仓库技术已经过时&#xff0c;廉颇老矣&#xff0c;不能应对新的挑战&#xff0c;在数字化转型中&#xff0c;不能发挥重要作用…

网络与协议安全复习 - 电子邮件安全

文章目录 PGP(Pretty Good Privacy)功能 S/MIME(Secure/Multipurpose Internet Mail Extensions)DKIM(Domain Keys Identified Mail) PGP(Pretty Good Privacy) 使用符号&#xff1a; Ks&#xff1a;会话密钥、KRa&#xff1a;A 的私钥、KUa&#xff1a;A 的公钥、EP&#xff…

JAVAWeb---- 数据库的简单了解

目录 1.什么是数据库 2.什么是数据库管理系统 3.什么是SQL 4.什么是关系型数据库 1.什么是数据库 用来存储和管理数据的“仓库”&#xff0c;简称DB(Database)&#xff1b; 2.什么是数据库管理系统 对数据库的一切操作都是在数据库管理系统进行的&#xff0c;比如MySQL&a…

【MySQL进阶之路 | 高级篇】MyISAM的索引方案

1. 前言 即使多个存储引擎支持同一种类型的索引

软件测试之解构单元测试

软件单元测试是对软件中的最小可测试单元进行检查和验证的过程。这些单元可以是函数、方法、类实例&#xff0c;或者是任何具有明确功能、规格定义和接口定义的程序代码模块。单元测试是软件开发过程中的最低级别的测试活动&#xff0c;它确保软件的独立单元在与程序的其他部分…

什么是社会工程攻击及其缓解措施?

在当今这个互联互通的世界&#xff0c;个人信息和敏感数据在网上频繁交换&#xff0c;成为社会工程攻击受害者的风险已成为人们日益担忧的问题。 社会工程学是网络犯罪分子使用的一种欺骗性技术&#xff0c;操纵个人泄露机密信息、获取未经授权的访问权限或执行可能危害其自身…

eclipse中没有SERVER的解决办法(超详细)

将 Tomcat 和 Eclipse 相关联时&#xff0c;Eclipse有的版本发现 发现eclipse->【Window】->【Preferences】里没有【server】从而配置不了Runtime Environment。所以需要通过eclipse进行安装。 通过我个人的经验下面给出解决办法&#xff1a; 一、获取 Eclipse版本 点击…

Kafka中的时间轮算法

1. Kafka与时间轮&#xff1a; Kafka的定时器底层使用时间轮算法。Kafka时间轮是层次时间轮&#xff0c;并且支持时间轮复用。 优点&#xff1a; 高效的插入操作&#xff1a; 时间轮底层数据结构&#xff08;桶&#xff09;&#xff0c;使用双向链表的设计使得插入操作的时间…

若电路板上的二极管损坏后怎么确定型号呢?

若电路板上的二极管损坏后&#xff0c;还可以看清原来管子的型号&#xff0c;换用一个同型号的二极管即可。若看不清型号或管子未标注型号&#xff0c;一般可以根据该二极管在电路中的作用来代换。电路板上的二极管坏了&#xff0c;如何确定它的型号&#xff1f;。 一般来说看…

气象数据NC、grb2解析成矢量json、CMIS、MICPS及图片应用到webgis

一、基础概念 气象数据通常以多种格式存储和交换&#xff0c;以适应不同的应用需求和处理工具。以下是一些常见的气象数据格式及其转换方法的概述&#xff1a; 常见气象数据格式 1. NetCDF&#xff08;Network Common Data Form&#xff09;&#xff1a;一种自描述、自包含的…

如何在MATLAB中创建各种常用的图形

本文将介绍如何在MATLAB中创建各种常用的图形。将涵盖以下内容&#xff1a; 基本的二维图形 折线图&#xff08;Line Plot&#xff09;散点图&#xff08;Scatter Plot&#xff09;条形图&#xff08;Bar Plot&#xff09;面积图&#xff08;Area Plot&#xff09; 三维图形 三…