描述
				给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
			
			
				岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。
			
			
				例如:
			
			
				输入
			
			
				[
			
			
				[1,1,0,0,0],
			
			
				[0,1,0,1,1],
			
			
				[0,0,0,1,1],
			
			
				[0,0,0,0,0],
			
			
				[0,0,1,1,1]
			
			
				]
			
			
				对应的输出为3
			
			
				(注:存储的01数据其实是字符'0','1')
			
		示例1
				输入: 
			[[1,1,0,0,0],[0,1,0,1,1],[0,0,0,1,1],[0,0,0,0,0],[0,0,1,1,1]]复制
				返回值: 
		3复制
	1、遍历一个二维数组比较简单,无论是用暴力遍历还是其他BFS或者DFS算法;
	2、因为连着的1可以被看做一个岛屿,所以如何计算岛屿的数量是本题的难点;
	3、本题使用淹没法,找到一个"1"后岛屿的数量就可以加1,同时把这个1上下左右相连的1全用0淹没掉,防止重复计算。
	4、淹没的结束条件是遇到0.
class Solution {
public:
    void bfs(vector<vector<char> >& grid, int x, int y) {
        int m = grid.size();
        int n = grid[0].size();
        if (x < 0 || x >= m || y < 0 || y >= n || grid[x][y] == '0') {
            return;
        }
        grid[x][y] = '0';
        bfs(grid, x, y - 1);
        bfs(grid, x, y + 1);
        bfs(grid, x - 1, y);
        bfs(grid, x + 1, y);
    }
    /**
     * 判断岛屿数量
     * @param grid char字符型vector<vector<>> 
     * @return int整型
     */
    int solve(vector<vector<char> >& grid) {
        // write code here
        int m = grid.size();
        int n = grid[0].size();
        int res = 0;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (grid[i][j] == '1') {
                    res++;
                    bfs(grid, i, j);
                }
            }
        }
        return res;
    }
};

京公网安备 11010502036488号