統計封閉島嶼的數目

2021-10-06 15:31:53 字數 1935 閱讀 9941

有乙個二維矩陣 grid ,每個位置要麼是陸地(記號為 0 )要麼是水域(記號為 1 )。

我們從一塊陸地出發,每次可以往上下左右 4 個方向相鄰區域走,能走到的所有陸地區域,我們將其稱為一座「島嶼」。

如果一座島嶼 完全 由水域包圍,即陸地邊緣上下左右所有相鄰區域都是水域,那麼我們將其稱為 「封閉島嶼」。

請返回封閉島嶼的數目。

示例 1:

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

輸出:2

解釋:灰色區域的島嶼是封閉島嶼,因為這座島嶼完全被水域包圍(即被 1 區域包圍)。

示例 2:

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

輸出:1

示例 3:

輸入:grid = [[1,1,1,1,1,1,1],

[1,0,0,0,0,0,1],

[1,0,1,1,1,0,1],

[1,0,1,0,1,0,1],

[1,0,1,1,1,0,1],

[1,0,0,0,0,0,1],

[1,1,1,1,1,1,1]]

輸出:2

1 <= grid.length, grid[0].length <= 100

0 <= grid[i][j] <=1

方法一:就是從**中的0開始找,遇到1就加1,遇到邊界就加0;然後取最小

class

solution,,

,};public

:int

dfs(vectorint>>

& grid,

int i,

int j)

if(grid[i]

[j]==1)

grid[i]

[j]=1;

int tmp =1;

for(

int k=

0;k<

4;k++

)return tmp;

}int

closedisland

(vectorint>>

& grid)

row = grid.

size()

; col = grid[0]

.size()

; res =0;

for(

int i=

0;i}return res;}}

;

為什麼要使用min()呢?因為只要有乙個返回0,就說明有乙個方向走出了邊界,那該位置所在島嶼就不是封閉島嶼,即使其它三個方向都返回1.

class

solution,,

,};public

:/***這裡面就是先遍歷四個邊,將邊裡面的0dfs成1,然後在遍歷裡面***/

void

dfs(vectorint>>

& grid,

int i,

int j)

grid[i]

[j]=1;

for(

int k=

0;k<

4;k++)}

intclosedisland

(vectorint>>

& grid)

row = grid.

size()

; col = grid[0]

.size()

;for

(int i=

0;i)for

(int i=

0;i)for

(int i=

0;i}return res;}}

;

這道題思路不難,但要注意程式設計時變數的應用;

leetcode 統計封閉島嶼的數目

有乙個二維矩陣 gri dgrid grid 每個位置要麼是陸地 記號為 0 要麼是水域 記號為 1 我們從一塊陸地出發,每次可以往上下左右 4 個方向相鄰區域走,能走到的所有陸地區域,我們將其稱為一座 島嶼 如果一座島嶼 完全 由水域包圍,即陸地邊緣上下左右所有相鄰區域都是水域,那麼我們將其稱為 ...

1254 統計封閉島嶼的數目

深度優先搜尋 dfs 的題。因為邊界的陸地不算島嶼,所以搜尋的時候把邊界的陸地及與邊界相連的陸地去掉。然後對陣列進行遍歷,求出島嶼數即可。方案一 public int closedisland int grid for int j 0 j grid 0 length j 尋找島嶼數量 int isl...

1254 統計封閉島嶼的數目(dfs)

1.問題描述 有乙個二維矩陣 grid 每個位置要麼是陸地 記號為 0 要麼是水域 記號為 1 我們從一塊陸地出發,每次可以往上下左右 4 個方向相鄰區域走,能走到的所有陸地區域,我們將其稱為一座 島嶼 如果一座島嶼 完全 由水域包圍,即陸地邊緣上下左右所有相鄰區域都是水域,那麼我們將其稱為 封閉島...