LeetCode 200 岛屿数量[DFS] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 200 岛屿数量[DFS] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
岛屿数量也算是比较经典的DFS题目了,仔细观察问题可以发现,这道题目求解的其实是连通图数量,不同的岛屿属于不同的连通图,那么思路就清晰了, 当遍历到其中一个岛屿时,把这个岛屿给淹了(全部变成0),遇到水都跳过,那么当遍历到另一个陆地时,就是另一个岛屿,执行同样的操作,如此进行直到所有的陆地全部被淹,代码如下:
class Solution {
private:
// 定义方向和网络的长宽
int direction[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
int m, n;
public:
int numIslands(vector<vector<char>>& grid) {
// 如果大小为0
if(grid.size() == 0) {
return 0;
}
// 计算长宽
m = grid.size();
n = grid[0].size();
// 统计数量
int count = 0;
for(int i = 0; i < m; i ++) {
for(int j = 0; j < n; j ++) {
if(grid[i][j] == '0') {
continue;
} else {
count ++;
dfs(grid, i, j);
}
}
}
return count;
}
void dfs(vector<vector<char>>& grid, int i, int j) {
// 如果越界或者是水的情况
if(i < 0 || i >= m || j < 0 || j >= n || grid[i][j] == '0') {
return;
}
grid[i][j] = '0';
// 遍历四个方向深搜
for(auto& d : direction) {
dfs(grid, i + d[0], j + d[1]);
}
}
};
/*作者:heroding
链接:https://leetcode-cn.com/problems/number-of-islands/solution/c-dfs-by-heroding-4jlj/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/
以上是关于LeetCode 200 岛屿数量[DFS] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章