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.le 1:
11110 11010 11000 00000
Answer: 1
11000 11000 00100 00011
Answer: 3
When we met a ‘1’, the answer add 1, we also need to search all ‘1’ which connected to it directly or indirectly, and change it to ‘0’. And we can use DFS or BFS to search.
DFS
======
class Solution
{
public:
int numIslands(vector<vector<char>> &grid)
{
if(grid.size() == 0 || grid[0].size() == 0)
return 0;int res = 0; for(int i = 0; i < grid.size(); ++ i) for(int j = 0; j < grid[0].size(); ++ j) if(grid[i][j] == '1') { ++ res; DFS(grid, i, j); } return res; }private:
void DFS(vector<vector<char>> &grid, int x, int y)
{
grid[x][y] = ‘0’;
if(x > 0 && grid[x - 1][y] == ‘1’)
DFS(grid, x - 1, y);
if(x < grid.size() - 1 && grid[x + 1][y] == ‘1’)
DFS(grid, x + 1, y);
if(y > 0 && grid[x][y - 1] == ‘1’)
DFS(grid, x, y - 1);
if(y < grid[0].size() - 1 && grid[x][y + 1] == ‘1’)
DFS(grid, x, y + 1);
}
};BFS
======class Solution
{
public:
int numIslands(vector<vector<char>> &grid)
{
if(grid.size() == 0 || grid[0].size() == 0)
return 0;int res = 0; for(int i = 0; i < grid.size(); ++ i) for(int j = 0; j < grid[0].size(); ++ j) if(grid[i][j] == '1') { ++ res; BFS(grid, i, j); } return res; }private:
void BFS(vector<vector<char>> &grid, int x, int y)
{
queue<vector<int>> q;
q.push({x, y});
grid[x][y] = ‘0’;while(!q.empty()) { x = q.front()[0], y = q.front()[1]; q.pop(); if(x > 0 && grid[x - 1][y] == '1') { q.push({x - 1, y}); grid[x - 1][y] = '0'; } if(x < grid.size() - 1 && grid[x + 1][y] == '1') { q.push({x + 1, y}); grid[x + 1][y] = '0'; } if(y > 0 && grid[x][y - 1] == '1') { q.push({x, y - 1}); grid[x][y - 1] = '0'; } if(y < grid[0].size() - 1 && grid[x][y + 1] == '1') { q.push({x, y + 1}); grid[x][y + 1] = '0'; } } }};
本文介绍了一种算法,用于计算二维网格地图中由 '1'(陆地)和 '0'(水域)组成的岛屿数量。文章提供了两种实现方法:深度优先搜索(DFS)和广度优先搜索(BFS),并详细解释了每种方法的具体步骤。
945

被折叠的 条评论
为什么被折叠?



