#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
// 定义深度优先搜索函数
void dfs(vector<vector<char>>& 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, j + 1, n, m); // 向右搜索
dfs(grid, i - 1, j, n, m); // 向上搜索
dfs(grid, i, j - 1, n, m); // 向左搜索
}
// 主函数,求解岛屿数量
int solve(vector<vector<char>>& grid) {
int count = 0; // 记录岛屿数量
int n = grid.size(); // 获取矩阵的行数
int m = grid[0].size(); // 获取矩阵的列数
// 定义方向数组,方便进行上下左右四个方向的遍历
int dx[4] = {-1, 0, 1, 0}; // 上、右、下、左
int dy[4] = {0, 1, 0, -1}; // 上、右、下、左
// 遍历整个矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
{
if (grid[i][j] != '0') // 如果当前位置是陆地 ('1'表示陆地)
{
count++; // 岛屿数量加一
//对于每个陆地,进行深度优先搜索,将与该陆地相连的所有陆地标记为已访问
dfs(grid, i, j, n, m);
}
}
}
return count; // 返回岛屿数量
}
};