給定乙個二維的矩陣,包含 『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
解釋:
被圍繞的區間不會存在於邊界上,換句話說,任何邊界上的 『o』 都不會被填充為 『x』。 任何不在邊界上,或不與邊界上的 『o』 相連的 『o』 最終都會被填充為 『x』。如果兩個元素在水平或垂直方向相鄰,則稱它們是「相連」的。
思路深度優先搜尋
由於邊界上的』0』以及與邊界上的』0』相連的』0』都不會被填充,內部包圍的』0』肯定不與邊界相連,所以,我們可以從邊界進行深度優先搜尋,對所有的』0』做標記,那麼其餘沒有被標記的點就全部應該變為』x』.
看**
class
solution
:def
solve
(self, board: list[list[
str]])
->
none
:"""
do not return anything, modify board in-place instead.
"""defdfs
(board, r, c):if
0<= r < rows and
0<= c < cols:
if outside[r]
[c]:
return
if board[r]
[c]==
'o':
# 如果當前元素為'o',將其標記,並對其上下左右做下一步的dfs處理
outside[r]
[c]=
true
dfs(board, r-
1, c)
dfs(board, r+
1, c)
dfs(board, r, c-1)
dfs(board, r, c+1)
ifnot board:
return
rows =
len(board)
cols =
len(board[0]
) outside =[[
false
]* cols for _ in
range
(rows)
]# 用來標記邊界上及和邊界相連的'o'
for i in
range
(rows)
:# 對第一列和最後一列進行遍歷處理,如果元素為'o',進行dfs遍歷處理
if board[i][0
]=='o':
dfs(board, i,0)
if board[i]
[cols-1]
=='o'
: dfs(board, i, cols-1)
for i in
range
(cols)
:# 對第一行和最後一行進行遍歷處理,如果元素為'o',進行dfs遍歷處理
if board[0]
[i]==
'o':
dfs(board,
0, i)
if board[rows-1]
[i]==
'o':
dfs(board, rows-
1, i)
# 標記完成之後,對所有未標記的元素置為'x',包括內部包圍的'o'
for r in
range
(rows)
:for c in
range
(cols):if
not outside[r]
[c]:
board[r]
[c]=
'x'
被圍繞的區域 Dfs
給定乙個二維的矩陣,包含?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 被圍繞的區域 DFS
難度 中等 題目描述 解題思路 這道題的思路有點巧妙 y 因為邊界上的o和它相鄰的o一定不會被標記,所以可以用逆向思維,先把所有邊界上的o和和它相鄰的o都標記出來,最後把標記還原,沒標記過的變成x 130.被圍繞的區域 2020 7 18 public void solve char board i...
130 被圍繞的區域 (dfs
被圍繞的區域 給定乙個二維的矩陣,包含 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 解釋 被圍...