LeetCode刷题笔记 200. 岛屿数量【DFS】【BFS】【并查集】

文章目录

https://leetcode-cn.com/problems/number-of-islands/solution/dao-yu-shu-liang-by-leetcode/

图解:DFS + BFS + 并查集(Python 代码、Java 代码)

DFS

class Solution {
public:
    void dfs(vector<vector<char>>& grid,int r,int c){
        int nr=grid.size();
        int nc=grid[0].size();
        grid[r][c]='0';
        if(r-1>=0&&grid[r-1][c]=='1') dfs(grid,r-1,c);
        if(r+1<nr&&grid[r+1][c]=='1') dfs(grid,r+1,c);
        if(c-1>=0&&grid[r][c-1]=='1') dfs(grid,r,c-1);
        if(c+1<nc&&grid[r][c+1]=='1') dfs(grid,r,c+1);
    }
    int numIslands(vector<vector<char>>& grid) {
        int nr=grid.size();
        if(!nr) return 0;
        int nc=grid[0].size();
        int num_islands=0;
        for(int r=0;r<nr;r++){
            for(int c=0;c<nc;c++){
                if(grid[r][c]=='1'){
                    ++num_islands;
                    dfs(grid,r,c);
                }
            }
        }
        return num_islands;
    }
};

BFS

class Solution {
public:
    int numIslands(vector<vector<char>>& grid) {
        int nr=grid.size();
        if(!nr) return 0;
        int nc=grid[0].size();
        int num_islands=0;
        for(int r=0;r<nr;r++){
            for(int c=0;c<nc;c++){
                if(grid[r][c]=='1'){
                    ++num_islands;
                    queue<pair<int, int>> neighbors;
                    neighbors.push({r, c});
                    while (!neighbors.empty()) {
                        auto rc = neighbors.front();
                        neighbors.pop();
                        int row = rc.first, col = rc.second;
                        if (row - 1 >= 0 && grid[row-1][col] == '1') {
                            neighbors.push({row-1, col});
                            grid[row-1][col] = '0';
                        }
                        if (row + 1 < nr && grid[row+1][col] == '1') {
                            neighbors.push({row+1, col});
                            grid[row+1][col] = '0';
                        }
                        if (col - 1 >= 0 && grid[row][col-1] == '1') {
                            neighbors.push({row, col-1});
                            grid[row][col-1] = '0';
                        }
                        if (col + 1 < nc && grid[row][col+1] == '1') {
                            neighbors.push({row, col+1});
                            grid[row][col+1] = '0';
                        }
                    }
                }
            }
        }
        return num_islands;
    }
};

并查集

猜你喜欢

转载自blog.csdn.net/g534441921/article/details/105642226