题解 | #岛屿数量#

岛屿数量

https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e

void dfs(char** grid, int gridRowLen, int gridColLen, int x, int y) {
    // 判断当前坐标是否在矩阵范围内
    if (x < 0 || x >= gridRowLen || y < 0 || y >= gridColLen) {
        return;
    }
    
    // 如果当前位置不是陆地或者已经访问过,返回
    if (grid[x][y] == '0') {
        return;
    }
    
    // 标记当前位置为海洋,表示已经访问过
    grid[x][y] = '0';
    
    // 递归处理四个方向
    dfs(grid, gridRowLen, gridColLen, x - 1, y); // 上
    dfs(grid, gridRowLen, gridColLen, x + 1, y); // 下
    dfs(grid, gridRowLen, gridColLen, x, y - 1); // 左
    dfs(grid, gridRowLen, gridColLen, x, y + 1); // 右
}

int solve(char** grid, int gridRowLen, int* gridColLen) {
    int islandCount = 0;
    
    // 遍历整个网格
    for (int i = 0; i < gridRowLen; i++) {
        for (int j = 0; j < *gridColLen; j++) {
            // 如果当前格子是陆地且没有被访问过
            if (grid[i][j] == '1') {
                // 使用DFS搜索整个岛屿并标记
                dfs(grid, gridRowLen, *gridColLen, i, j);
                // 发现一个新的岛屿,计数加一
                islandCount++;
            }
        }
    }
    
    return islandCount;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务