岛屿数量

思路1 dfs
(1)遇到为‘1’的情况,将num_island+1,然后将与之相邻的全部置为1。
(2)遍历(1)过程。
void dfs(vector<vector<char>>& grid, int x, int y, int n, int m) {
if (x < n && y < m && x >= 0 && y >= 0) {
if('1' == grid[x][y]) {
grid[x][y] = '0';
dfs(grid, x - 1, y, n, m);
dfs(grid, x + 1, y, n, m);
dfs(grid, x, y - 1, n, m);
dfs(grid, x, y + 1, n, m);
}
}
}
int numIslands(vector<vector<char>>& grid) {
int n = grid.size();
if (0 == n) return 0;
int m = grid[0].size();
if (0 == m) return 0;
int num_island = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if(grid[i][j] == '1') {
num_island++;
dfs(grid, i, j, n, m);
}
}
}
return num_island;
}
思路2 广度优先(bfs)
遍历到为‘1’的情况,将这个坐标(i,j)放入队列中,num_island加1,
然后不断从队列中取,(i,j)的上下左右,如果有为1的情况,也变为0,放入队列中,直到队列为空。

浙公网安备 33010602011771号