泛洪演算法 LeetCode200

2021-10-02 05:28:07 字數 953 閱讀 4111

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

示例 1:

輸入:

11110

11010

11000

00000

輸出: 1

floodfill 演算法通常譯作「洪水灌溉法」,它是一種圖論演算法,對於乙個圖來說,可以很方便的求子圖的個數。 演算法通過給圖中的頂點染色,最終使得同乙個連通分量的頂點顏色相同,不同連通分量的頂點顏色不同。

在上述題目中要求得島嶼的數量。可以把乙個整個輸入的二維網格看做無向圖,值為』1』的網格上下左右四個方向任一網格也為』1』,則認為這兩個網格連通。把乙個島嶼看做乙個連通分量,這樣題目的要求就抽象為求得乙個無向圖的連通分量的個數。

用vector

<

vector

<

char

>>來儲存輸入的二維網格,字元』0』代表水,字元』1』代表陸地。首先讀取輸入的二維網格的行數和列數,如果為空則直接返回0,如果不為空,則對每個陸地網格進行深度優先遍歷,來統計連通分量的個數。在具體的深度優先遍歷的過程中,先對該網格進行「塗色」(置為』x』),再分別遍歷其四個方向上的網格,不斷回溯。當該連通分量遍歷完後,再遍歷其他沒有被「塗色」的網格,直至所有陸地網格都被「塗色」,連通解析度的個數也就統計出來了。

#include#include#include #include using namespace std;

class solution ;

void solution::dfs (vector>& grid, int r, int c)

int solution::numislands (vector>& grid)

} }return num_islands;

}

演算法題 leetcode200 島嶼數量

題目描述 給定乙個由 1 陸地 和 0 水 組成的的二維網格,計算島嶼的數量。乙個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連線而成的。你可以假設網格的四個邊均被水包圍。深度搜尋class solution return count public static void combine ...

leetcode200 島嶼個數

對方格中的每乙個點為起點進行遍歷。如果找到乙個為1的點,結果就更新。以該點為中心,搜尋四周的點 搜尋流程 如果越界,返回 如果是0,返回 向四周搜尋class solution object def numislands self,grid type grid list list str rtype...

LeetCode 200 島嶼數量

給定乙個由 1 陸地 和 0 水 組成的的二維網格,計算島嶼的數量。乙個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連線而成的。你可以假設網格的四個邊均被水包圍。示例 1 輸入 11110 11010 11000 00000輸出 1 示例 2 輸入 11000 11000 00100 00...