Code Practice Journal | Day52_Graph03

KamaCoder 101. 孤岛的总面积

题目:101. 孤岛的总面积 (kamacoder.com)
题解:代码随想录 (programmercarl.com)

solution
namespace ACMModeExample
{class Program{static void Main(string[] args){// 读取矩阵的行数和列数string[] dimensions = Console.ReadLine().Split();int N = int.Parse(dimensions[0]);int M = int.Parse(dimensions[1]);// 初始化矩阵int[,] grid = new int[N, M];// 读取矩阵数据for (int i = 0; i < N; i++){string[] line = Console.ReadLine().Split();for (int j = 0; j < M; j++){grid[i, j] = int.Parse(line[j]);}}// 标记数组,用于标记已访问的陆地bool[,] visited = new bool[N, M];int totalArea = 0;// 定义四个方向,分别是上、下、左、右int[] dRow = new int[] { -1, 1, 0, 0 };int[] dCol = new int[] { 0, 0, -1, 1 };// 检查是否在边界内bool IsWithinBoundary(int row, int col){return row >= 0 && row < N && col >= 0 && col < M;}// 深度优先搜索,计算岛屿的面积,同时判断是否为孤岛int Dfs(int row, int col, ref bool isIsolated){if (!IsWithinBoundary(row, col) || visited[row, col] || grid[row, col] == 0)return 0;visited[row, col] = true;int area = 1;// 如果任何陆地单元格接触了边界,标记为非孤岛if (row == 0 || row == N - 1 || col == 0 || col == M - 1){isIsolated = false;}for (int i = 0; i < 4; i++){int newRow = row + dRow[i];int newCol = col + dCol[i];area += Dfs(newRow, newCol, ref isIsolated);}return area;}// 遍历矩阵,查找所有岛屿for (int i = 0; i < N; i++){for (int j = 0; j < M; j++){if (grid[i, j] == 1 && !visited[i, j]){bool isIsolated = true;int area = Dfs(i, j, ref isIsolated);if (isIsolated){totalArea += area;}}}}// 输出所有孤岛的总面积Console.WriteLine(totalArea);}}
}
summary

KamaCoder 102. 沉没孤岛

题目:102. 沉没孤岛 (kamacoder.com)
题解:代码随想录 (programmercarl.com)

solution
namespace ACMModeExample
{class Program{static int[,] directions = new int[,]{{ 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 }};static void Main(string[] args){// 读取第一行,包含两个整数 N 和 Mstring[] dimensions = Console.ReadLine().Split();int N = int.Parse(dimensions[0]);int M = int.Parse(dimensions[1]);int[,] matrix = new int[N, M];// 读取接下来的 N 行,每行包含 M 个整数for (int i = 0; i < N; i++){string[] rows = Console.ReadLine().Split();for (int j = 0; j < M; j++){matrix[i, j] = int.Parse(rows[j]);}}// 处理边界,将边界上的岛屿及其相连的岛屿标记为非孤岛for (int i = 0; i < N; i++){if (matrix[i, 0] == 1)MarkNonIsolated(matrix, i, 0, N, M);if (matrix[i, M - 1] == 1)MarkNonIsolated(matrix, i, M - 1, N, M);}for (int j = 0; j < M; j++){if (matrix[0, j] == 1)MarkNonIsolated(matrix, 0, j, N, M);if (matrix[N - 1, j] == 1)MarkNonIsolated(matrix, N - 1, j, N, M);}// 处理矩阵内部,将孤岛沉没for (int i = 1; i < N - 1; i++){for (int j = 1; j < M - 1; j++){if (matrix[i, j] == 1){matrix[i, j] = 0;  // 沉没孤岛}}}// 恢复标记为-1的边界岛屿for (int i = 0; i < N; i++){for (int j = 0; j < M; j++){if (matrix[i, j] == -1){matrix[i, j] = 1;}}}// 输出沉没孤岛后的矩阵for (int i = 0; i < N; i++){for (int j = 0; j < M; j++){Console.Write(matrix[i, j] + " ");}Console.WriteLine();}}static void MarkNonIsolated(int[,] matrix, int x, int y, int N, int M){matrix[x, y] = -1;  // 标记为非孤岛for (int i = 0; i < 4; i++){int newX = x + directions[i, 0];int newY = y + directions[i, 1];if (newX >= 0 && newX < N && newY >= 0 && newY < M && matrix[newX, newY] == 1){MarkNonIsolated(matrix, newX, newY, N, M);}}}}
}
summary

KamaCoder 103. 水流问题

题目:103. 水流问题 (kamacoder.com)
​​​​​​​题解:代码随想录 (programmercarl.com)

solution
namespace ACMModeExample
{class Program{static void Main(string[] args){// 读取矩阵的尺寸string[] dimensions = Console.ReadLine().Split();int N = int.Parse(dimensions[0]);int M = int.Parse(dimensions[1]);// 初始化矩阵int[,] heights = new int[N, M];for (int i = 0; i < N; i++){string[] row = Console.ReadLine().Split();for (int j = 0; j < M; j++){heights[i, j] = int.Parse(row[j]);}}// 初始化两个布尔矩阵,用于标记是否可以到达第一组边界和第二组边界bool[,] canReachFirstBoundary = new bool[N, M];bool[,] canReachSecondBoundary = new bool[N, M];// 从第一组边界开始 DFS:包括左边界和上边界for (int i = 0; i < N; i++){DFS(heights, canReachFirstBoundary, i, 0);}for (int j = 0; j < M; j++){DFS(heights, canReachFirstBoundary, 0, j);}// 从第二组边界开始 DFS:包括右边界和下边界for (int i = 0; i < N; i++){DFS(heights, canReachSecondBoundary, i, M - 1);}for (int j = 0; j < M; j++){DFS(heights, canReachSecondBoundary, N - 1, j);}// 输出结果:找出同时可以到达两组边界的单元格for (int i = 0; i < N; i++){for (int j = 0; j < M; j++){if (canReachFirstBoundary[i, j] && canReachSecondBoundary[i, j]){Console.WriteLine($"{i} {j}");}}}}// 深度优先搜索 (DFS)private static void DFS(int[,] heights, bool[,] canReach, int x, int y){if (canReach[x, y]) return;canReach[x, y] = true;// 向四个方向探索(上、下、左、右)if (x > 0 && heights[x - 1, y] >= heights[x, y]){DFS(heights, canReach, x - 1, y); // 向上}if (x < heights.GetLength(0) - 1 && heights[x + 1, y] >= heights[x, y]){DFS(heights, canReach, x + 1, y); // 向下}if (y > 0 && heights[x, y - 1] >= heights[x, y]){DFS(heights, canReach, x, y - 1); // 向左}if (y < heights.GetLength(1) - 1 && heights[x, y + 1] >= heights[x, y]){DFS(heights, canReach, x, y + 1); // 向右}}}
}
summary

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

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

相关文章

[Matsim]Matsim学习笔记-population.xml的创建

学习需求 在利用matsim实现交通模拟时&#xff0c;需要把模拟的乘客出行数据替换成自己的&#xff0c;如何进行替换呢&#xff1f; 带着这个问题&#xff0c;调研学习matsim&#xff0c;实现population.xml的生成 调研笔记 幸运的发现matsim中实现了很多的writer工具类&#xf…

unity 使用Sqlite报错

Fallback handler could not load library C:/Users/Administrator/Desktop/xxx /_Data/MonoBleedingEdge/sqlite3&#xff0c; 出现DllNotFoundException: sqlite3 assembly:<unknown assembly> type:<unknown type> member:(null) 解决方法 &#xff1a;下载一个…

Nacos微服务注册管理中心与服务通信

参照springboot-alibaba-ribbon项目学习 E:\Codes\Idea_java_works\apesource\springboot\微服务\springboot_alibaba_ribbon Nacos 微服务注册中心-discover Nacos 是⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。简单来说 Nacos 就是 注册中⼼ 配置…

Java入门:06.Java中的方法--进阶02.03

2 可变参数 方法调用时&#xff0c; 传递的实参数量&#xff0c;是由被调用方法的参数列表数列决定的。 一般来讲&#xff0c;传递的实参数量必须与形参变量数量相同&#xff0c;但是也有一种特殊的参数&#xff0c;允许调用时传递的实参数量是可变&#xff0c;这种参数就称为…

CSS3多行多栏布局

当前布局由6个等宽行组成&#xff0c;其中第四行有三栏&#xff0c;第五行有四栏。 重点第四行设置&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>img {hei…

做项目过程中问题小汇总 | vue3 elementplus js

el-card去除阴影 <el-card style"box-shadow: none;"> </el-card>el-button按钮加图标 <el-button type"primary" size"default" icon"Plus"click"addRole">添加职位</el-button>el-table表头的文…

linux和docker部署基本的命令掌握

git用到的指令 上传代码 git add . git commit -m zhushi git push 拉取代码 git clone 代码仓地址 git pulldocker用到的指令 # 查看docker下的容器进程,停止和删除 docker ps -a docker stop name(id) docker rm name(id) # docker下面的镜像和删除 docker images docker r…

AI 时代的编程革命:如何在挑战中抓住机遇?

AI 发展对软件开发的挑战与机遇&#xff1a;程序员应对策略 随着人工智能&#xff08;AI&#xff09;技术的快速进步&#xff0c;软件开发领域正经历深刻的变革。AI 不仅改变了编程的方式&#xff0c;也对程序员的职业发展产生了重要影响。在这个背景下&#xff0c;我们既看到…

WPF—数据模版绑定数据集合(listbox和panel)

WPF—数据模版绑定数据集合(listbox和panel) WPF中&#xff0c;可以使用ListBox或者Panel&#xff08;比如StackPanel或Canvas&#xff09;来展示数据集合&#xff0c;并使用数据模板DataTemplate来定义数据的呈现方式。以下是一些简单的例子&#xff0c;展示如何将数据集合绑…

C#高级进阶---关于插件开发(初版)

一、关于插件 插件开发是一种使应用程序功能可扩展的技术。通过插件&#xff0c;应用程序可以动态地加载和使用外部功能模块&#xff0c;而无需重新编译整个程序。 1. 插件架构设计 插件系统通常包含以下几个核心部分&#xff1a; 主程序&#xff08;Host Application&#x…

HTML5休闲小游戏《砖块破坏者》源码,引流、刷广告利器

HTML5休闲小游戏《砖块破坏者》源码&#xff0c;直接把源码上传到服务器就能使用了&#xff01; 下载链接&#xff1a;https://www.huzhan.com/code/goods468802.html

Linux:Bash中的命令介绍(简单命令、管道以及命令列表)

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 在Bash中&#xff0c;命令执行的方式可以分为简单命令、管道和命令列表组成。这些结构提供了强大的工具&#xff0c;允许用户组合命令并精确控制其执行方式。以下是对这…

自己制作VOC转yolo的软件

不多说&#xff0c;直接贴源码&#xff0c;很简单&#xff0c;直接复制下来运行就行 from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton,QListWidget, QProgressBar, QHBoxLayout, QMainWindow, QFileDialog, QMenu,QDesktopWidget, QSplas…

Kubernetes 中如何对 etcd 进行备份和还原

etcd 是 Kubernetes 集群的重要组件&#xff0c;存储了集群的所有数据&#xff0c;如配置文件、状态信息、以及服务发现数据。因此&#xff0c;定期备份和能够快速还原 etcd 数据是保障 Kubernetes 集群安全与稳定运行的关键步骤。本文将详细介绍如何对 etcd 进行备份与还原的具…

7z解压crc错误 7-Zip-常见问题解答

7-Zip 是一个流行的文件压缩和解压缩工具&#xff0c;但在使用过程中&#xff0c;有时会遇到 CRC&#xff08;循环冗余校验&#xff09;错误。这通常意味着压缩文件已损坏或未完全下载。以下是一些可能的原因及解决方案。 常见原因 文件损坏&#xff1a;下载过程中出现错误&a…

2024年【电气试验】找解析及电气试验模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 电气试验找解析根据新电气试验考试大纲要求&#xff0c;安全生产模拟考试一点通将电气试验模拟考试试题进行汇编&#xff0c;组成一套电气试验全真模拟考试试题&#xff0c;学员可通过电气试验模拟考试全真模拟&#…

文件IO和多路复用IO

目录 前言 一、文件 I/O 1.基本文件 I/O 操作 1.1打开文件 1.2读取文件内容 (read) 1.3写入文件 (write) 1.4关闭文件 (close) 2.文件指针 二、多路复用 I/O 1.常用的多路复用 I/O 模型 1.1select 1.2poll 1.3epoll 2.使用 select、poll 和 epoll 进行简单的 I/O…

C++观察者模式Observer

组件协作 –(都是晚绑定的&#xff09; ----观察者模式 为某些对象建立一种通知依赖的关系&#xff0c; 只要这个对象状态发生改变&#xff0c;观察者对象都能得到通知。 但是依赖关系要松耦合&#xff0c;不要太依赖。 eg&#xff1a;做一个文件分割器&#xff0c;需要一个…

css实现水滴效果图

效果图&#xff1a; <template><div style"width: 100%;height:500px;padding:20px;"><div class"water"></div></div> </template> <script> export default {data() {return {};},watch: {},created() {},me…

B/S架构和C/S架构的区别

B/S架构、C/S架构区别 1. B/S架构 1.1 什么是B/S架构 B/S架构的全称为Browser/Server&#xff0c;即浏览器/服务器结构。Browser指的是Web浏览器&#xff0c;极少数事务逻辑在前端实现&#xff0c;但主要事务逻辑在服务器端实现。B/S架构的系统无须特别安装&#xff0c;只需要…