【多次过】【矩阵】Lintcode 433:岛屿的个数

给一个01矩阵,求不同的岛屿的个数。

0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。

样例

在矩阵:

[
  [1, 1, 0, 0, 0],
  [0, 1, 0, 0, 1],
  [0, 0, 0, 1, 1],
  [0, 0, 0, 0, 0],
  [0, 0, 0, 0, 1]
]

中有 3 个岛.

解题思路:

    遍历每一个位置,若当前位置为土地(值为1),对其进行深搜,深搜同时将此位置的值置为0.

    注意对矩阵和递归的学习!

    下面的代码是参考网上大神AC

class Solution {
public:
    /**
     * @param grid: a boolean 2D matrix
     * @return: an integer
     */
    int numIslands(vector<vector<bool>> &grid) 
    {
        // write your code here
        if(grid.empty() || grid[0].empty())
            return 0;
        
        int row = grid.size();
        int col = grid[0].size();
        int count = 0;
        
        for(int i=0;i<row;i++)
        {
            for(int j=0;j<col;j++)
            {
                if(grid[i][j])
                {
                    ++count;
                    dfs(grid,i,j);
                }
            }
        }
        
        return count;
    }
    
    void dfs(vector<vector<bool>> &grid,int x,int y)
    {
        if(x<0 || y<0 || x>=grid.size() ||y>=grid[0].size() || grid[x][y]==false)
            return;
            
        grid[x][y] = false;
        
        dfs(grid,x-1,y);
        dfs(grid,x+1,y);
        dfs(grid,x,y-1);
        dfs(grid,x,y+1);
    }
};


猜你喜欢

转载自blog.csdn.net/majichen95/article/details/80725094