Code Practice Journal | Day52_Graph03

2024-08-24 22:36

本文主要是介绍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

这篇关于Code Practice Journal | Day52_Graph03的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1103793

相关文章

Debugging Lua Project created in Cocos Code IDE creates “Waiting for debugger to connect” in Win-7

转自 I Installed Cocos Code IDE and created a new Lua Project. When Debugging the Project(F11) the game window pops up and gives me the message waiting for debugger to connect and then freezes. Also a

LLVM入门2:如何基于自己的代码生成IR-LLVM IR code generation实例介绍

概述 本节将通过一个简单的例子来介绍如何生成llvm IR,以Kaleidoscope IR中的例子为例,我们基于LLVM接口构建一个简单的编译器,实现简单的语句解析并转化为LLVM IR,生成对应的LLVM IR部分,代码如下,文件名为toy.cpp,先给出代码,后面会详细介绍每一步分代码: #include "llvm/ADT/APFloat.h"#include "llvm/ADT/S

VS Code 调试go程序的相关配置说明

用 VS code 调试Go程序需要在.vscode/launch.json文件中增加如下配置:  // launch.json{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information,

Linux日志-journal日志

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux 系统中的日志是记录系统活动和事件的重要工具,它们可以帮助管理员监视系统状态、调查问题以及了解系统运行状况。主要涉及到系统日志,登录日志,定时任务日志,监控日志,崩溃日志,二进制日志等内容,这些日志都存储在/var/log目录下,有的日志文本格式,可以直接使用

【代码随想录训练营第42期 续Day52打卡 - 图论Part3 - 卡码网 103. 水流问题 104. 建造最大岛屿

目录 一、做题心得 二、题目与题解 题目一:卡码网 103. 水流问题 题目链接 题解:DFS 题目二:卡码网 104. 建造最大岛屿 题目链接 题解:DFS  三、小结 一、做题心得 也是成功补上昨天的打卡了。 这里继续图论章节,还是选择使用 DFS 来解决这类搜索问题(单纯因为我更熟悉 DFS 一点),今天补卡的是水流问题和岛屿问题。个人感觉这一章节题对于刚

code: 400, msg: Required request body is missing 错误解决

引起这个错误的原因是,请求参数按照get方式给。 应该给json字符串才对 补充: 1. @RequestBody String resource 加@RequestBody必须给json字符串,否则会报错400,记如标题错误。 不加这个的进行请求的话,其实post和get就没有什么区别了。 2. List<String> indexCodes=(List<String>)json.

iOS项目发布提交出现invalid code signing entitlements错误。

1、进入开发者账号,选择App IDs,找到自己项目对应的AppId,点击进去编辑, 2、看下错误提示出现  --Specifically, value "CVYZ6723728.*" for key "com.apple.developer.ubiquity-container-identifiers" in XX is not supported.-- 这样的错误提示 将ubiquity

解决服务器VS Code中Jupyter突然崩溃的问题

问题 本来在服务器Anaconda的Python环境里装其他的包,装完了想在Jupyter里写代码验证一下有没有装好,一运行发现Jupyter崩溃了!?报错如下所示 Failed to start the Kernel. ImportError: /home/hujh/anaconda3/envs/mia/lib/python3.12/lib-dynload/_sqlite3.cpython-

Behind the Code:与 Rakic 和 Todorovic 对话 OriginTrail 如何实现 AI 去中心化

原文:https://www.youtube.com/watch?v=ZMuLyLCtE3s&list=PLtyd7v_I7PGnko80O0LCwQQsvhwAMu9cv&index=12 作者:The Kusamarian 编译:OneBlock+ 随着人工智能技术的飞速发展,一系列前所未有的挑战随之而来:模型的衰退与互联网的潜在威胁愈发明显。AI 的增长曲线可能因训练过程中的瓶颈而趋于平

冒泡排序和鸡尾酒排序(code)

昨天回顾了下冒泡排序和鸡尾酒排序,用面向对象的方式写了一下,并且优化了代码,记录一下~ 一、冒泡排序 # 冒泡排序class BubbleSort(object):def __init__(self, data_list):self.data_list = data_listself.length = len(data_list)# 简单粗暴的排序方式def b_sort(self):d