题目:
给定'1's(土地)和'0's(水)的2d网格图,计算岛屿的数量。
岛被水包围,通过水平或垂直连接相邻的土地而形成。您可以假设网格的所有四个边都被水包围。
分析:
//截至条件:如何判定这是一个岛屿grid[i+1][j] == 0 && grid[i][j+1] == 0的时候
//确定这是一个岛屿,此时在存储岛屿数量的变量上加1
Code:
int numIslands(vector<vector<char>>&grid) { int conCount = 0; for (int i = 0;i<grid.size();i++) { for (int j = 0;j>grid[0].size();j++) { if (grid[i][j] == '1') { conCount = dfs(grid, i, j); } } } return conCount; } int dfs(vector<vector<char>>&grid,int i,int j) { if (i < 0 || i >grid.size()||j<0||j>grid[0].size()||grid[i][j] == '0') { return 0; } int areaCount = 0; grid[i][j] = '0'; if (grid[i+1][j] == '0' && grid[i][j+1] == '0' && grid[i+1][j+1] == '1') { areaCount++; } return dfs(grid, i, j - 1) + dfs(grid, i - 1, j) + dfs(grid, i, j + 1) + dfs(grid, i + 1, j); }
//现在的情况是输出0;
//也就是在案例中没有出现
grid[i+1][j] == '0' && grid[i][j+1] == '0' && grid[i+1][j+1] == '1'的情况