1.题目
给定2d网格图(其中,1代表陆地 0代表水),计算岛屿数量。 岛被水包围,通过水平或垂直连接相邻的土地而形成。
您可以假设网格的所有四个边缘都被水包围。
示例:
Input: 11000 11000 00100 00011 Output: 3
2.思路
DFS的思想。
遍历矩阵,每遇到’1’后, 开始向四个方向DFS,搜'1'到后该位置变为’0’,因为相邻的属于一个island,然后开始继续找下一个’1’。
3.实现
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
if(grid.empty())
return 0;
int cnt = 0;
for(int row = 0; row < grid.size(); row++)
for(int col = 0; col < grid[0].size(); col++)
if(grid[row][col] == '1')
{
cnt++;
dfsHelper(grid, row, col);
}
return cnt;
}
void dfsHelper(vector<vector<char>>& grid, int row, int col)
{
// row col 位置 DFS
if(row < 0 || row >= grid.size() || col < 0 || col >= grid[0].size() || grid[row][col] == '0')
return;
grid[row][col] = '0';
dfsHelper(grid, row + 1, col);
dfsHelper(grid, row - 1, col);
dfsHelper(grid, row, col + 1);
dfsHelper(grid, row, col - 1);
}
};