题意理解
在一张n×m图上,统计1聚在一起的团的数量
问题分析
递归
找到一个小岛,邻接小岛都需要统计,直接设成海洋,本身先设置成海洋,递归将上下左右的区域,如果是小岛都设置海洋。
其他
这是个好题。学习
链接
int numIslands(vector<vector<char>>& grid) {
int count = 0;
for(int i = 0; i < grid.size(); i++) //遍历所有小岛
{
for(int j = 0; j < grid[i].size(); j++)
{
if (grid[i][j] == '1') //如果是1
{
count ++; //增加小岛计数
helper(grid, i, j); //炸掉邻接小岛
}
}
}
return count;
}
void helper(vector<vector<char>>& grid, int i, int j)
{
//i,j不在区域范围内,或者i,j位置本身是海洋
if (i < 0 || i >= grid.size() || j < 0 || j >= grid[i].size() || grid[i][j] == '0')
return; //直接返回
grid[i][j] = '0'; //炸掉当前小岛
helper(grid, i - 1, j); //递归探测上边情况
helper(grid, i + 1, j); //递归探测下边情况
helper(grid, i, j + 1); //递归探测右边情况
helper(grid, i, j - 1); //递归探测左边情况
}