给一个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); } };