leetcode200岛屿数量

    技术2023-09-07  103

    题干: 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。

    示例 1: 输入: 11110 11010 11000 00000 输出: 1 示例 2: 输入: 11000 11000 00100 00011 输出: 3 解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。

    解题思路: 1.遍历数组,寻找起始点 2.深度优先搜索向四周搜索,并将搜索过的1置零,搜索到不能搜索后返回。 3.设计一个变量存放岛屿的数量。

    代码实现:

    void DFS(char** grid, int i, int j, int m, int n) { if (i > m - 1 || i < 0 || j > n - 1 || j < 0 || grid[i][j] != '1') { return ; //当越界或者上下左右都没有相连的1时,返回 } grid[i][j] = '2'; DFS(grid, i + 1, j, m, n); DFS(grid, i - 1, j, m, n); DFS(grid, i, j + 1, m, n); DFS(grid, i, j - 1, m, n); } int numIslands(char** grid, int gridSize, int* gridColSize) { if (grid == NULL || gridSize == 0) //grid为空时返回0 { return 0; } int i, j; int m = gridSize, n = * gridColSize; int island = 0; for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { if (grid[i][j] == '1') { island++; DFS(grid, i, j, m, n); } } } return island; }
    Processed: 0.009, SQL: 9