欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 岛屿数量习题分析

岛屿数量习题分析

2025/5/3 14:10:25 来源:https://blog.csdn.net/m0_74313252/article/details/144144236  浏览:    关键词:岛屿数量习题分析

习题:(leetcode 200)

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

分析:

使用方法为DFS,将遇到的“岛屿”更改为0,表示已探索。以二维数组作为坐标系,设置行列,进行探索。因为岛屿为1,水为0,可以将遍历时遇到的岛屿转化为0,再让其上下左右四个方向进行搜索,遇到1就转变为0。当四个方向的搜索结果都是0时,再进行下一个坐标的遍历。依次将每个点都遍历一遍。

代码分析:

class Solution {
public:int numIslands(vector<vector<char>>& grid) {// 如果网格为空或第一个元素为空,则没有岛屿if (grid.empty() || grid[0].empty()) return 0;int result = 0; // 岛屿数量int row = grid.size(); // 网格的行数int col = grid[0].size(); // 网格的列数// 遍历网格中的每个单元格for (int i = 0; i < row; ++i) {for (int j = 0; j < col; ++j) {// 如果单元格是陆地,则开始深度优先搜索if (grid[i][j] == '1') {++result; // 发现新岛屿,岛屿数量加1dfs(grid, i, j); // 使用深度优先搜索标记所有相连的陆地}}}// 返回岛屿总数return result;}// 辅助函数,执行深度优先搜索void dfs(vector<vector<char>>& grid, int x, int y) {// 检查当前位置是否超出网格边界或是否为水if (x < 0 || y < 0 || x >= grid.size() || y >= grid[0].size() || grid[x][y] == '0') {return;}// 将当前位置标记为已访问(即设置为水)grid[x][y] = '0';// 递归地访问当前位置的上下左右四个方向dfs(grid, x - 1, y); // 上dfs(grid, x + 1, y); // 下dfs(grid, x, y - 1); // 左dfs(grid, x, y + 1); // 右}
};

版权声明:

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

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

热搜词