欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > Code Practice Journal | Day51__Graph02

Code Practice Journal | Day51__Graph02

2024/10/24 17:19:07 来源:https://blog.csdn.net/Janniam/article/details/141462563  浏览:    关键词:Code Practice Journal | Day51__Graph02

LeetCode 200. 岛屿数量

题目:200. 岛屿数量 - 力扣(LeetCode)

solution
public class Solution {int result = 0;public int NumIslands(char[][] grid) {int m = grid.Length;int n = grid[0].Length;for(int i = 0; i < m; i ++){for(int j = 0; j < n; j ++){if(grid[i][j] == '1'){islandTra(grid, i, j , m, n);result ++;}}}return result;}public void islandTra(char[][] grid, int x, int y, int m, int n){if(x < 0 || y < 0 || x >= m || y >= n) return;if(grid[x][y] == '0' || grid[x][y] == '2') return;grid[x][y] = '2';islandTra(grid, x, y + 1, m, n);islandTra(grid, x, y - 1, m, n);islandTra(grid, x + 1, y, m, n);islandTra(grid, x - 1, y, m, n);}
}
summary

两种遍历:

外层遍历grid所有元素,找到未被遍历过的岛屿——'1'

内层DFS岛屿所有元素,标记遍历过的岛屿——'2'

KamaCoder 99. 岛屿数量

题目:

给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。

输入:

第一行包含两个整数 N, M,表示矩阵的行数和列数。

后续 N 行,每行包含 M 个数字,数字为 1 或者 0。

输出: 

输出一个整数,表示岛屿的数量。如果不存在岛屿,则输出 0。

solution
using System;public class Program {public 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[] row = Console.ReadLine().Split();for (int j = 0; j < M; j++) {grid[i, j] = int.Parse(row[j]);}}// 计算岛屿数量int islandCount = 0;for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {if (grid[i, j] == 1) {// 每发现一个岛屿,计数并进行DFS标记islandCount++;DFS(grid, i, j, N, M);}}}// 输出岛屿数量Console.WriteLine(islandCount);}// DFS 递归函数,用于标记已访问的岛屿private static void DFS(int[,] grid, int i, int j, int N, int M) {// 如果越界或当前格子是水(0),则返回if (i < 0 || i >= N || j < 0 || j >= M || grid[i, j] == 0) {return;}// 将当前格子标记为已访问(0表示水)grid[i, j] = 0;// 递归搜索四个方向DFS(grid, i - 1, j, N, M); // 上DFS(grid, i + 1, j, N, M); // 下DFS(grid, i, j - 1, N, M); // 左DFS(grid, i, j + 1, N, M); // 右}
}

LeetCode 695. 岛屿的最大面积

 题目:695. 岛屿的最大面积 - 力扣(LeetCode)

在上题基础上加入当前面积和更新面积的操作

solution
public class Solution {int result = 0;int area = 0;public int MaxAreaOfIsland(int[][] grid) {int m = grid.Length;int n = grid[0].Length;for(int i = 0; i < m; i ++){for(int j = 0; j < n; j ++){if(grid[i][j] == 1){area = 0;islandTra(grid, i, j , m, n);result = Math.Max(result, area);}}}return result;}public void islandTra(int[][] grid, int x, int y, int m, int n){if(x < 0 || y < 0 || x >= m || y >= n) return;if(grid[x][y] == 0 || grid[x][y] == 2) return;grid[x][y] = 2;area ++;islandTra(grid, x, y + 1, m, n);islandTra(grid, x, y - 1, m, n);islandTra(grid, x + 1, y, m, n);islandTra(grid, x - 1, y, m, n);}
}

KamaCoder 100. 岛屿的最大面积

题目:

给定一个由 1(陆地)和 0(水)组成的矩阵,计算岛屿的最大面积。岛屿面积的计算方式为组成岛屿的陆地的总数。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。

输入:

第一行包含两个整数 N, M,表示矩阵的行数和列数。后续 N 行,每行包含 M 个数字,数字为 1 或者 0,表示岛屿的单元格。

输出: 

输出一个整数,表示岛屿的最大面积。如果不存在岛屿,则输出 0。

solution
using System;public class Program {public 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[] row = Console.ReadLine().Split();for (int j = 0; j < M; j++) {grid[i, j] = int.Parse(row[j]);}}// 计算最大岛屿面积int maxArea = 0;for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {if (grid[i, j] == 1) {// 每发现一个岛屿,计算其面积并更新最大面积int currentArea = DFS(grid, i, j, N, M);maxArea = Math.Max(maxArea, currentArea);}}}// 输出最大岛屿面积Console.WriteLine(maxArea);}// DFS 递归函数,用于计算岛屿面积private static int DFS(int[,] grid, int i, int j, int N, int M) {// 如果越界或当前格子是水(0),则返回面积0if (i < 0 || i >= N || j < 0 || j >= M || grid[i, j] == 0) {return 0;}// 将当前格子标记为已访问(0表示水)grid[i, j] = 0;// 计算当前格子的面积为1,并递归计算四个方向的面积int area = 1;area += DFS(grid, i - 1, j, N, M); // 上area += DFS(grid, i + 1, j, N, M); // 下area += DFS(grid, i, j - 1, N, M); // 左area += DFS(grid, i, j + 1, N, M); // 右return area;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com