Number of Islands
给定一个二位数组,其中’0’代表水,’1’代表土地,判断有多少个孤岛被水隔开。假定二位数组四周都是’0’
思路:
遇到一个’1’就代表肯定有孤岛,然后从这个位置开始将所有相邻的’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} };