岛屿数量

思路1 dfs
(1)遇到为‘1’的情况,将num_island+1,然后将与之相邻的全部置为1。
(2)遍历(1)过程。
void dfs(vector<vector<char>>& grid, int x, int y, int n, int m) {
        if (x < n && y < m && x >= 0 && y >= 0) {
            if('1' == grid[x][y]) {
                grid[x][y] = '0';
                dfs(grid, x - 1, y, n, m);
                dfs(grid, x + 1, y, n, m);
                dfs(grid, x, y - 1, n, m);
                dfs(grid, x, y + 1, n, m);
            }
        }
    }
    int numIslands(vector<vector<char>>& grid) {
        int n = grid.size();
        if (0 == n) return 0;
        int m = grid[0].size();
        if (0 == m) return 0;
        int num_island = 0;
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                if(grid[i][j] == '1') {
                    num_island++;
                    dfs(grid, i, j, n, m);
                }
            }
        }
        return num_island;
    }
思路2 广度优先(bfs)
遍历到为‘1’的情况,将这个坐标(i,j)放入队列中,num_island加1,
然后不断从队列中取,(i,j)的上下左右,如果有为1的情况,也变为0,放入队列中,直到队列为空。
 
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号