原题地址:https://leetcode-cn.com/problems/number-of-islands/description/
题目描述:
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
示例 1:
输入:
11110
11010
11000
00000
输出: 1
示例 2:
输入:
11000
11000
00100
00011
输出: 3
解题方案:
采用广度优先遍历的方式,不知道怎么写,就用一个dfs()函数实现就可以了。
代码:
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
int count = 0;
for(int i = 0; i < grid.size(); i ++){
for(int j = 0; j < grid[0].size(); j ++){
if(grid[i][j] >= '1'){
count ++;
dfs(grid, i, j);
}
}
}
return count;
}
void dfs(vector<vector<char>>& grid, int i, int j){
if(i >= grid.size() || i < 0 || j < 0 || j >= grid[0].size() || grid[i][j] != '1')
return;
grid[i][j] = '0';
dfs(grid, i + 1, j);
dfs(grid, i, j + 1);
dfs(grid, i - 1, j);
dfs(grid, i, j - 1);
}
};