题目:
给定一个由 '1'
(陆地)和 '0'
(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
int n = 0;
for(int i = 0; i < grid.size(); ++i)
{
for(int j = 0; j < grid[i].size(); ++j)
{
if(grid[i][j] == '1')
{
++n;
convert_to_zero(grid, i, j);
}
}
}
return n;
}
private:
void convert_to_zero(vector<vector<char>>& grid, int i, int j)
{
if(grid[i][j] == '0')
return;
grid[i][j] = '0';
for(auto& dir : dirs)
{
int row = i + dir[0];
int col = j + dir[1];
if(row < 0 || row >= grid.size() || col < 0 || col >= grid[row].size())
continue;
convert_to_zero(grid, row, col);
}
}
static vector<vector<char>> dirs;
};
vector<vector<char>> Solution::dirs = { {0, 1}, {1, 0}, {0, -1}, {-1, 0} };