200. Number of Islands

来源:互联网 发布:淘宝店铺导航全屏代码 编辑:程序博客网 时间:2024/06/03 21:22

200. Number of Islands

题目:

Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

Example 1:

11110110101100000000Answer: 1

Example 2:

11000110000010000011Answer: 3

代码如下:

class Solution {public:    int numIslands(vector<vector<char>>& grid) {        int row = grid.size();        if (row == 0)  return 0;        int col = grid[0].size(), num = 0;        for (int i = 0; i < row; i++) {            for (int j = 0; j < col; j++) {                if (grid[i][j] == '1') {                    ++num;                    searchOne(grid, i, j);                }            }        }        return num;    }    void searchOne(vector<vector<char>>& grid, int a, int b) {        if (a < 0 || a >= grid.size() || b < 0 || b >= grid[0].size() || grid[a][b] == '0') return;        grid[a][b] = '0';        searchOne(grid, a + 1, b);        searchOne(grid, a - 1, b);        searchOne(grid, a, b + 1);        searchOne(grid, a, b - 1);    }};

解题思路:

  • 采用深度优先搜索;
  • 若与当前点上下左右相邻且值为1则视为在同一个岛,那么,当前点值为1时,不妨遍历它周围的所有点,并将所有与它相邻的值为1的点都变为0,递归下去;
  • 那么所有搜索到的单个的1值,即上一个1值所没有搜索到的,说明不连续;
  • 则所有1的个数即为岛的个数。