200:Number of Islands【DFS】【BFS】

题目链接:click~

/*题意:给出一个二维0和1的矩阵,判断有多少全是1的封闭区域*/

/**
 *思路:遍历矩阵,遇到1时,以该点为起始点,向四周做深度优先遍历,遇到
 *      1是,标记为已访问的状态
 *
 */

class Solution {
private:
    int n,m;
public:
    void DFS(vector<vector<char>> &grid, vector<int> &dx, vector<int> &dy, int x, int y) {
        for(int i = 0; i < 4; i ++) { //四个方向
            int nx = x + dx[i];
            int ny = y + dy[i];
            if(0 <= nx && nx < n && 0 <= ny && ny < m && grid[nx][ny] == '1') {
                grid[nx][ny] = '0';
                DFS(grid, dx, dy, nx, ny);
            }
        }
    }
    int numIslands(vector<vector<char>> &grid) {
        n = grid.size();
        if(n == 0) return 0;
        m = grid[0].size();

        vector<int> dx = {-1, 1, 0, 0};
        vector<int> dy = {0, 0, 1, -1};
        int ans = 0;
        for(int i = 0; i < n; i ++) {
            for(int j = 0; j < m; j ++) {
                if(grid[i][j] == '1') {
                    grid[i][j] = '0';
                    ans ++;
                    DFS(grid, dx, dy, i, j);
                }
            }
        }
        return ans;
    }
};


发布了185 篇原创文章 · 获赞 10 · 访问量 16万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章