資料結構 廣度搜尋BFS

2021-10-03 22:17:06 字數 1724 閱讀 1968

給定乙個包含了一些 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』。

class

solution

:def

maxareaofisland

(self, grid: list[list[

int]])

->

int:

ifnot grid:

return

0 areas =

visit =[[

0for _ in

range

(len

(grid[0]

))]for __ in

range

(len

(grid))]

steps =[[

1,0]

,[-1

,0],

[0,1

],[0

,-1]

]# bfs搜尋

defbfs

(x,y)

: area =

1 queue =

[(x,y)

] visit[x]

[y]=

1while queue:

p = queue.pop(0)

for i in steps:

dx, dy = p[0]

+ i[0]

, p[1]

+ i[1]

if0<= dx <

len(grid)

and0

<= dy <

len(grid[0]

)and grid[dx]

[dy]==1

and visit[dx]

[dy]==0

: visit[dx]

[dy]=1

area +=

1(dx, dy)

)for i in

range

(len

(grid)):

for j in

range

(len

(grid[0]

)):if grid[i]

[j]==

1and visit[i]

[j]==0:

bfs(i,j)

return

max(areas)

if areas else

0

廣度搜尋bfs

廣度搜尋在acm中應用十分廣泛,英文簡寫是bfs breadth first search 下面先看一下例子 在乙個4 4的矩形中,有一些位置設定有障礙,要求從 1,1 走到 4,4 求最短距離。分析 假設沒有任何障礙,我們可以走的路線如下 起點為 1,1 假設這一步是第一步可以到達的位置 然後它可...

資料結構 廣度優先搜尋

實驗任務 眾所周知,索隆是乙個路痴,一天在一小島上,他又迷路了!好 山治心急如焚,決定出去找他,由於練成了月步,山治的速度竟然達到了正無窮!小島上除了空地,還有盤 絲洞 簡稱 psd 盤絲洞裡住著可愛的妹紙,山治每次經過乙個盤絲洞,都要停留乙個單 位時間來欣賞妹紙,給你乙個 n m 的地圖以及山治和...

廣度優先搜尋 資料結構

廣度優先搜尋 bfs 的乙個常見應用是找出從根結點到目標結點的最短路徑。結點的處理順序是越是接近根結點的結點將越早地遍歷。佇列的入隊和出隊順序是新新增的節點不會立即遍歷,而是在下一輪中處理。結點的處理順序與它們新增到佇列的順序是完全相同的順序,即先進先出 fifo 這就是我們在 bfs 中使用佇列的...