LeetCode 200. Number of Islands 島嶼數量(C++)

寫在前面

  • 持續刷題學習ing
  • 出來混遲早都要還的,還大學期間欠下的算法債,,,
  • 刷題過程中,暫不考慮性能等,以方法便捷、有效爲準

試題詳情

  • 試題描述
給你一個由 '1'(陸地)和 '0'(水)組成的的二維網格,請你計算網格中島嶼的數量。

島嶼總是被水包圍,並且每座島嶼只能由水平方向或豎直方向上相鄰的陸地連接形成。

此外,你可以假設該網格的四條邊均被水包圍。
  • 測試用例
input:
11110
11010
11000
00000
output: 1

input:
11000
11000
00100
00011
output: 3

AC代碼

  • C++
class Solution {
public:
	void dfs(vector<vector<char>>& grid, int i, int j){
		int m = grid.size() // 行數
		int n = grid[0].size(); // 列數
        if(i < 0 || j < 0 || i >= m || j >= n || grid[i][j] == '0')
            return;
        grid[i][j] = '0';
        dfs(grid, i-1, j);
        dfs(grid, i, j-1);
        dfs(grid, i+1, j);
        dfs(grid, i, j+1);
	    }
    int numIslands(vector<vector<char>>& grid) {
        if(grid.size() == 0 || grid[0].size() == 0)
            return 0;
        m = grid.size();
        n = grid[0].size();
        int res = 0;
        for(int i = 0; i < m; ++i){
            for(int j = 0; j < n; ++j){
                if(grid[i][j] == '1'){
                    dfs(grid, i, j);
                    res++;
                }
            }
        }
        return res;
    }
};
  • vector 二維數組
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<vector<int>> A;
    vector<int> B;
    B.push_back(0);
    B.push_back(1);
    A.push_back(B);
    B.clear();
    B.push_back(2);
    B.push_back(3);
    A.push_back(B);
    // 行數 / 列數
    cout << A.size() << " -- " << A[0].size()  << endl;

    for (int i = 0; i < A.size(); i++)
    {
        for (int j = 0; j < A[0].size(); j++)
            cout << A[i][j] << " ";
        cout << endl;
    }
    return  0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章