廣度優先遍歷之 130 被圍繞的區域

2021-10-09 02:40:28 字數 1362 閱讀 9803

給定乙個二維的矩陣,包含'x''o'字母 o)。

找到所有被'x'圍繞的區域,並將這些區域裡所有的'o''x'填充。

示例:

x x x x

x o o x

x x o x

x o x x

執行你的函式後,矩陣變為:

x x x x

x x x x

x x x x

x o x x

題目的要求比較簡單了,就是如果x把o都圍起來,那麼就把圍起來的o都變成x。如果沒有被圍,那麼原定的o不會變。從題目的角度來分析,我們其實需要從最外面的四條邊來出發,如果四條邊都是x,沒o那就說明這個四條邊圍的o都需要變成x來處理,如果右o的話,作為乙個突破口,不斷的去觀察,然後標記與o相鄰的o。知道沒有與o相鄰的o出現,標記就完成了。然後對給定的二維矩陣重新左更改,對於標記的都變成o,沒有標記的都變成x。

修該陣列中的』o『

class solution:

def solve(self, board: list[list[str]]) -> none:

"""do not return anything, modify board in-place instead.

"""queue = collections.deque()

m = len(board)

if m<=2:

return

n = len(board[0])

if n<=2:

return

#對陣列進行標記,且把『o』的位置新增到佇列中

for i in range(m):

if board[i][0]=='o':

board[i][0]='.'

if board[i][n-1]=='o':

board[i][n-1]='.'

for i in range(n):

if board[0][i]=='o':

board[0][i]='.'

if board[m-1][i]=='o':

board[m-1][i]='.'

#bfs模板

while queue:

x,y = queue.popleft()

zuobiao = [(1,0),(0,1),(-1,0),(0,-1)]

for xd,yd in zuobiao:

x,y = x+xd,y+yd

if 0<=x總結:典型的迷宮,島嶼問題,這種問題都是需要使用bfs模板。

10 31 LeetCode 130 被圍繞的區域

題目描述 給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。示例 x x x x x o o x x x o x x o x x 執行你的函式後,矩陣變為 x x x x x x x x x x x x x o x x 解釋 被圍繞的...

130 被圍繞的區域

題目 給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。示例 x x x x x o o x x x o x x o x x 執行你的函式後,矩陣變為 x x x x x x x x x x x x x o x x 解釋 被圍繞的區間...

130 被圍繞的區域

1.所有包含o的邊界上的的格仔,以及它們的鄰居o都不會被包圍,暫時地將這些o標記,通過深度優先搜尋查詢這些o,最後將所有未被標記的o轉換為x class solution def solve self,board list list str none do not return anything,m...