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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章