島嶼的最大面積

2022-08-10 06:12:07 字數 2436 閱讀 6213

695. 島嶼的最大面積

給定乙個包含了一些 0 和 1的非空二維陣列grid, 乙個島嶼是由四個方向 (水平或垂直) 的1(代表土地) 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。

找到給定的二維陣列中最大的島嶼面積。(如果沒有島嶼,則返回面積為0。)

示例 1:

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

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

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

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

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

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

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

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

對於上面這個給定矩陣應返回6。注意答案不應該是11,因為島嶼只能包含水平或垂直的四個方向的『1』。

#廣度優先搜尋

# 將接下來的元素放入佇列,只要對列非空,出對列並判斷是否為邊界,否則是陸地,標記,以新位置開始移動加入佇列

def maxareaofisland(grid) -> int:

ans = 0

for i,l in enumerate(grid):

for j,n in enumerate(l):

que = [[i,j]]#加入佇列

cur = 0

while que:

cur_i,cur_j = que.pop(0)#出對列,判斷

if cur_i<0 or cur_i==len(grid) or cur_j <0 or cur_j==len(grid[0]) or grid[cur_i][cur_j] !=1:

continue

cur += 1

grid[cur_i][cur_j] = 0#標記,開始新的加入

for di,dj in [[0,1],[0,-1],[1,0],[-1,0]]:

next_i,next_j = cur_i+di,cur_j+dj

ans = max(cur,ans)

return ans

#深度優先搜尋,棧

# 將接下來的元素放入棧,只要棧非空,出棧並判斷是否為邊界,否則是陸地,標記,以新位置開始移動加入棧

def maxareaofisland(grid) -> int:

ans = 0

for i,l in enumerate(grid):

for j,n in enumerate(l):

stack = [[i,j]]#加入棧,用list作為棧,list尾部作為棧頂

cur = 0

while stack:

cur_i,cur_j = stack.pop()#出棧

if cur_i<0 or cur_i==len(grid) or cur_j <0 or cur_j==len(grid[0]) or grid[cur_i][cur_j] !=1:

continue

cur += 1

grid[cur_i][cur_j] = 0#標記,開始新的加入

for di,dj in [[0,1],[0,-1],[1,0],[-1,0]]:

next_i,next_j = cur_i+di,cur_j+dj

ans = max(cur,ans)

return ans

# 深度優先搜尋,遞迴

# 定義乙個外部函式判斷當前位置是否為邊界,邊界則返回0函式結束,如果不是,移動位置遞迴,每遞迴一次+1

def maxareaofisland(grid) -> int:

ans = 0

for i,l in enumerate(grid):

for j,n in enumerate(l):

ans = max(dfs(grid,i,j),ans)

return ans

def dfs(grid,i,j):

if i<0 or i==len(grid) or j <0 or j==len(grid[0]) or grid[i][j] !=1:

return 0

ans = 1

grid[i][j] = 0#標記

for di,dj in [[0,1],[0,-1],[1,0],[-1,0]]:

next_i,next_j = i+di,j+dj

ans += dfs(grid,next_i,next_j)

return ans

島嶼的最大面積

給定乙個包含了一些 0 和 1的非空二維陣列 grid 乙個 島嶼 是由四個方向 水平或垂直 的 1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0,0,0 0,0...

島嶼的最大面積

給定乙個包含了一些 0 和 1的非空二維陣列 grid 乙個 島嶼 是由四個方向 水平或垂直 的 1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0,0,0 0,0...

島嶼的最大面積

題目 給定乙個包含了一些 0 和 1的非空二維陣列 grid 乙個 島嶼 是由四個方向 水平或垂直 的 1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0,0,0 ...