您的位置:首页 > 其它

每天一道LeetCode-----给定二维数组代表海域和岛屿,计算有多少个孤岛

2018-03-02 16:06 513 查看

Number of Islands

原题链接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} };
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode
相关文章推荐