leetcode-200.島嶼數量

給定一個由 ‘1’(陸地)和 ‘0’(水)組成的的二維網格,計算島嶼的數量。一個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連接而成的。你可以假設網格的四個邊均被水包圍。

示例 1:

輸入:

11110
11010
11000
00000

輸出: 1
示例 2:

輸入:
11000
11000
00100
00011

輸出: 3

#include <iostream>
#include <vector>
using namespace std;

void dfs(vector<vector<char>> &grid, int i, int j){
    int row = grid.size();
    int col = grid[0].size();
    grid[i][j] = '0';
    if (i - 1 >= 0 && grid[i - 1][j] == '1') {
        dfs(grid, i - 1, j);
    }
    if (i + 1 < row && grid[i + 1][j] == '1') {
        dfs(grid, i + 1, j);
    }
    if (j - 1 >= 0 && grid[i][j - 1] == '1') {
        dfs(grid, i, j - 1);
    }
    if (j + 1 < col && grid[i][j + 1] == '1') {
        dfs(grid, i, j + 1);
    }
}
int numIslands(vector<vector<char>>& grid) {
    if (grid.empty()) {
        return 0;
    }
    int row = grid.size();
    int col = grid[0].size();
    int cnt = 0;
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            if (grid[i][j] == '1') {
                dfs(grid, i, j);
                cnt++;
            }
        }
    }
    return cnt;
}

int main() {
    vector<vector<char>> grid = {
            {'1','1','0','0','0'},
            {'1','1','0','0','0'},
            {'0','0','1','0','0'},
            {'0','0','0','1','1'}
    };
    int cnt = numIslands(grid);
    cout << cnt << endl;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章