#include <vector> using namespace std; class Solution { public: // 方向数组:上下左右 int dx[4] = {0, 0, 1, -1}; int dy[4] = {1, -1, 0, 0}; /** * 判断岛屿数量 * @param grid char字符型vector<vector<>> * @return int整型 */ int solve(vector<vector<char> >& grid) { if (grid.empty() || grid[0].empty()) { return 0; } int rows = grid.size(); int cols = grid[0].size(); vector<vector<bool>> visited(rows, vector<bool>(cols, false)); int islandCount = 0; // 遍历整个网格 for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { // 找到未访问的陆地,开始DFS if (grid[i][j] == '1' && !visited[i][j]) { dfs(grid, visited, i, j); islandCount++; } } } return islandCount; } // DFS:标记所有相连的陆地为已访问 void dfs(vector<vector<char>>& grid, vector<vector<bool>>& visited, int x, int y) { // 标记当前位置为已访问 visited[x][y] = true; // 探索四个方向 for (int i = 0; i < 4; ++i) { int nx = x + dx[i]; int ny = y + dy[i]; // 检查边界和是否为未访问的陆地 if (nx >= 0 && nx < grid.size() && ny >= 0 && ny < grid[0].size()) { if (grid[nx][ny] == '1' && !visited[nx][ny]) { dfs(grid, visited, nx, ny); } } } } };