130 被包圍的區域python實現

2021-10-07 06:34:51 字數 2360 閱讀 8718

**題目描述:**給定乙個二維的矩陣,包含 『x』 和 『o』(字母 o)。找到所有被 『x』 圍繞的區域,並將這些區域裡所有的 『o』 用 『x』 填充。

參考別人的思路,用dfs寫了以下**,遇到了一些坑。。

class

solution

(object):

defsolve

(self, board)

:"""

:type board: list[list[str]]

:rtype: none do not return anything, modify board in-place instead.

"""#從四條邊上的o出發,用dfs把所有相鄰的o變成『p』

#再遍歷陣列,把o變成x,再把『p』變成o

ifnot board or

not board[0]

:return board

m, n =

len(board)

,len

(board[0]

) dx =[1

,-1,

0,0]

dy =[0

,0,1

,-1]

defdfs

(x0, y0)

:for k in

range(4

):x = x0 + dx[k]

y = y0 + dy[k]if0

<= x < m and

0<= y < n and board[x]

[y]==

"o":

board[x]

[y]=

"p" dfs(x, y)

#[0, m-1] 和[0, n - 1]是個list,表示邊界

# for i in [0, m - 1]:

# for j in range(n):

# if board[i][j] == "o":

# board[i][j] = "p"

# dfs(i, j)

# for j in [0, n - 1]:

# for i in range(m):

# if board[i][j] == "o":

# board[i][j] = "p"

# dfs(i, j)

for i in

range

(m):

for j in

range

(n):

if board[i]

[j]==

"o":

if i ==

0or i == m -

1or j ==

0or j == n -1:

board[i]

[j]=

"p" dfs(i, j)

for i in

range

(m):

for j in

range

(n):

if board[i]

[j]==

"o":

board[i]

[j]=

"x"elif board[i]

[j]==

"p":

board[i]

[j]=

"o"

看別人在處理邊界時,用到的兩個迴圈,for i in [0, m -1]和for i in [0, n - 1],一開始一直把[0, m -1]當成類似range(0, m)這樣的範圍區間,,死活調了半個多小時通不過,後來怎麼才發現[0, m -1]是個list,,只包含0和m-1兩個數。。。。我太難了。。。。後來終於搞清楚了,自己寫了乙個迴圈,搞定邊界處理。還是要程式設計基礎紮實啊。。。

for i in

range

(m):

for j in

range

(n):

if board[i]

[j]==

"o":

if i ==

0or i == m -

1or j ==

0or j == n -1:

board[i]

[j]=

"p" dfs(i, j)

被X包圍的區域

題目描述 給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。輸入 輸入樣例由多組資料組成。第一行輸入兩個正整數n,m表示邊界。1 n,m 100 接下來輸入nm個 x 和 o 表示矩陣。輸出 輸出乙個nm的矩陣表示填充後的矩陣。樣例輸...

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...