题目:岛屿数量
题目描述:
给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
示例:
题解:
该题和扫雷问题是相似的,甚至比扫雷问题简单,但都是用到了深度优先搜索。遍历岛屿二维向量,发现1时,深搜,把1的上下左右仍是1的置0,并继续深搜,直至二维向量全为0.深搜的次数即为所求。
代码:
class Solution {
public:
void dfs(vector<vector<char>>& grid,int m,int n)
{
int i,j;
int sum=0;
if(grid[m][n]=='1')
{
grid[m][n]='0';
for(i=m-1;i<=m+1;i++)
{
for(j=n-1;j<=n+1;j++)
{
sum++;
if(i<0||i>=grid.size()||j<0||j>=grid[0].size()||sum%2==1)//越界
{
continue;
}
else
{
dfs(grid,i,j);//递归展开
}
}
}
}
}
int numIslands(vector<vector<char>>& grid) {
int sum=0;
int i,j;
int x=0,y=0;
for(i=0;i<grid.size();i++)
{
for(j=0;j<grid[0].size();j++)
{
if(grid[i][j]=='1')
{
dfs(grid,i,j);
sum++;
}
}
}
return sum;
}
};
执行用时 :16 ms, 在所有 C++ 提交中击败了57.63%的用户
内存消耗 :8.6 MB, 在所有 C++ 提交中击败了100.00%的用户