给定一个由 '1'
(陆地)和 '0'
(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
示例 1:
输入:
11110
11010
11000
00000
输出: 1
示例 2:
输入:
11000
11000
00100
00011
输出: 3
图论内容,使用DFS解决。遍历二维数组,遇到陆地的时候则岛屿数量+1,同时使用DFS消除与此岛屿相连的所有陆地,然后继续遍历二维数组,如果又碰到陆地,说明是一个新的岛,消除与之相连的陆地,继续遍历,同理直到遍历完毕。
class Solution {
public:
void DFS(vector<vector<char>>& grid,int i,int j)
{
if(grid[i][j]=='0') return ;
grid[i][j]='0';
//防止数组越界的同时,向当前结点的上下左右探索,去消除相连的陆地
if(i-1>=0) DFS(grid,i-1,j);
if(i+1<grid.size()) DFS(grid,i+1,j);
if(j-1>=0) DFS(grid,i,j-1);
if(j+1<grid[0].size()) DFS(grid,i,j+1);
}
int numIslands(vector<vector<char>>& grid) {
int island_cnt=0;//岛屿数量
for(int i=0;i<grid.size();i++)
{
for(int j=0;j<grid[i].size();j++)
{
if(grid[i][j]=='1')
{
island_cnt++;//找到一个1说明又找到一个岛
DFS(grid,i,j);//将与这个岛相连的陆地都变成0,那么下次再碰到一个1时就是找到一个新的岛
}
}
}
return island_cnt;
}
};