#include <functional>
class Solution {
public:
/**
* 判断岛屿数量
* @param grid char字符型vector<vector<>>
* @return int整型
*/
int solve(vector<vector<char> >& grid) {
int m = grid.size();
if (m == 0) {
return 0;
}
int n = grid[0].size();
if (n == 0) {
return 0;
}
function<void(int, int)> dfs = [&](int i, int j) -> void {
grid[i][j] = '0';
if (i > 0 && grid[i - 1][j] == '1') {
dfs(i - 1, j);
}
if (i < m - 1 && grid[i + 1][j] == '1') {
dfs(i + 1, j);
}
if (j > 0 && grid[i][j - 1] == '1') {
dfs(i, j - 1);
}
if (j < n - 1 && grid[i][j + 1] == '1') {
dfs(i, j + 1);
}
};
int res = 0;
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (grid[i][j] == '1') {
++res;
dfs(i, j);
}
}
}
return res;
}
};
思路:dfs
每遇到一块陆地,就增加一个岛屿计数,然后遍历该岛屿,把岛屿变成海洋,就能确保下次不选中相同岛屿上的陆地。

京公网安备 11010502036488号