问题描述
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:
Input:
11110
11010
11000
00000
Output: 1 - Example 2:
Input:
11000
11000
00100
00011
Output: 3
完整问题描述点击这里
解题思路
可以发现该题本质是求矩阵中连续区域的个数,可以使用深度优先搜索DFS,对每次出现‘1’的区域进行计数,遍历完之后,将其置为‘0’
完整代码
class Solution {
public:
int numIslands(vector<vector<char>> &grid) {
int ret = 0;
if(grid.empty() || grid[0].empty())
return ret;
int m = grid.size();
int n = grid[0].size();
for(int i = 0; i < m; i ++)
{
for(int j = 0; j < n; j ++)
{
if(grid[i][j] == '1')
{
dfs(grid, i, j, m, n);
ret ++;
}
}
}
return ret;
}
void dfs(vector<vector<char>> &grid, int i, int j, int m, int n)
{
grid[i][j] = '0';
if(i > 0 && grid[i-1][j] == '1')
dfs(grid, i-1, j, m, n);
if(i < m-1 && grid[i+1][j] == '1')
dfs(grid, i+1, j, m, n);
if(j > 0 && grid[i][j-1] == '1')
dfs(grid, i, j-1, m, n);
if(j < n-1 && grid[i][j+1] == '1')
dfs(grid, i, j+1, m, n);
}
};