2020-11-03島嶼數(shù)量

給你一個(gè)由 '1'(陸地)和 '0'(水)組成的的二維網(wǎng)格,請(qǐng)你計(jì)算網(wǎng)格中島嶼的數(shù)量。

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

此外,你可以假設(shè)該網(wǎng)格的四條邊均被水包圍。

示例 1:

輸入:grid = [
  ["1","1","1","1","0"],
  ["1","1","0","1","0"],
  ["1","1","0","0","0"],
  ["0","0","0","0","0"]
]
輸出:1

示例 2:

輸入:grid = [
  ["1","1","0","0","0"],
  ["1","1","0","0","0"],
  ["0","0","1","0","0"],
  ["0","0","0","1","1"]
]
輸出:3

提示:

m == grid.length
n == grid[i].length
1 <= m, n <= 300
grid[i][j] 的值為 '0' 或 '1'

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/number-of-islands
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。


DFS算法:

class Solution {
private:
    void dfs(vector<vector<char>>& grid,int r,int c){
        int rr=grid.size();
        int cc=grid[0].size();

        grid[r][c]='0';//重新構(gòu)建一個(gè)矩陣
        if(r-1>=0&&grid[r-1][c]=='1') dfs(grid,r-1,c);
        if(r+1<rr&&grid[r+1][c]=='1') dfs(grid,r+1,c);
        if(c-1>=0&&grid[r][c-1]=='1') dfs(grid,r,c-1);
        if(c+1<cc&&grid[r][c+1]=='1') dfs(grid,r,c+1);
    }
public:
    int numIslands(vector<vector<char>>& grid) {
        int rr=grid.size();
        if(!rr)return 0;
        int cc=grid[0].size();

        int num=0;
        for (int r=0;r<rr;r++) {
            for (int c=0;c<cc;c++){
                if (grid[r][c]=='1')  {
                    ++num;
                    dfs(grid,r,c);
                }
            }
        }
        return num;
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容