lintcode 433岛屿的个数
题目:
给一个01矩阵,求不同的岛屿的个数。
0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
样例:

思路:
根据提示,因为上下左右有1表示为一个岛,我们可以用深度优先遍历来解决。当遍历到“1”时,递归判断周围是否有“1”,若有,继续遍历;反之,则将已经遍历的部分全部置为0,然后继续遍历下一个点。代码如下(C++):
class Solution { public: /** * @param grid a boolean 2D matrix * @return an integer */ int numIslands(vector<vector<bool>>& grid) { if (grid.empty()) return 0; int cnt = 0; for (int i = 0; i < grid.size(); i++) { for (int j = 0; j < grid.at(0).size(); j++) { if (1 == grid[i][j]) { cnt++; grid[i][j] = 0; if (i > 0 && grid[i - 1][j]) { numIslandsCore(grid, i - 1, j); } if (j > 0 && grid[i][j - 1]) { numIslandsCore(grid, i, j - 1); } if (i < grid.size() - 1 && grid[i + 1][j]) { numIslandsCore(grid, i + 1, j); } if (j < grid.at(0).size() - 1 && grid[i][j + 1]) { numIslandsCore(grid, i, j + 1); } } } } return cnt; } void numIslandsCore(vector<vector<bool> > &grid, int i, int j) { //cout << i << j << endl; grid[i][j] = 0; if (i > 0 && grid[i - 1][j]) { numIslandsCore(grid, i - 1, j); } if (j > 0 && grid[i][j - 1]) { numIslandsCore(grid, i, j - 1); } if (i < grid.size() - 1 && grid[i + 1][j]) { numIslandsCore(grid, i + 1, j); } if (j < grid.at(0).size() - 1 && grid[i][j + 1]) { numIslandsCore(grid, i, j + 1); } return; } };
浙公网安备 33010602011771号