#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; // 返回岛屿数量 } };