天天看點

LeetCode第 200 題:島嶼數量(C++)

200. 島嶼數量 - 力扣(LeetCode)

LeetCode第 200 題:島嶼數量(C++)

類似LeetCode第 130 題:被圍繞的區域(C++)_zj-CSDN部落格

dfs

要向四個方向周遊,一開始以為三個方向就可以,後來才發現可能需要向上的

class Solution {
public:
    int res = 0;
    int numIslands(vector<vector<char>>& grid) {
        if(grid.empty())    return res;
        int n = grid.size(), m = grid[0].size();
        for(int i = 0; i < n; ++i){
            for(int j = 0; j < m; ++j){
                if(grid[i][j] == '1'){
                    ++res;
                    dfs(grid, i, j);
                }
            }
        }
        return res;
    }
    //四個方向周遊,把與x, y相連的1全部标記為-1
    void dfs(vector<vector<char>> &grid, int x, int y){
        if(x < 0 || x >= grid.size() || y < 0 || y >= grid[0].size() || grid[x][y] != '1')  return;
        grid[x][y] = -1;
        dfs(grid, x+1, y);//向下
        dfs(grid, x, y+1);//向右
        dfs(grid, x, y-1);//向左
        dfs(grid, x-1, y);//向上
    }
};
           

同樣一遍周遊一遍修改,bfs也是一樣的