Computer >> Máy Tính >  >> Lập trình >> Python

Các khu vực được bao quanh bằng Python

Giả sử chúng ta có một bảng 2D chứa X và O. Chụp tất cả các vùng được bao quanh bởi X. Một vùng được ghi lại bằng cách thay đổi tất cả Os thành X trong vùng được bao quanh đó.

X X X X
X O O X
X X O X
X O X X

Sau khi chạy đầu ra sẽ là

X X X X
X X X X
X X X X
X O X X

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Nếu bảng không xuất hiện, hãy trả lại bảng trống
  • cho tôi trong phạm vi từ 0 đến số hàng - 1 -
    • if board [i, 0] =‘O’, then make_one (board, i, 0)
    • if board [i, length of row - 1] =‘O’, then make_one (board, i, length of row - 1)
  • cho tôi trong phạm vi từ 0 đến số cols - 1 -
    • if board [0, i] =‘O’, then make_one (board, 0, i)
    • if board [count of row - 1, i] =‘O’, then make_one (board, count of row - 1, i)
  • cho tôi trong phạm vi từ 0 đến số hàng
    • cho j trong phạm vi 0 đến số cols
      • if board [i, j] =‘O’, then board [i, j] =‘X’, ngược lại là 1, board [i, j] =‘O’
  • Make_one sẽ như thế nào -
  • nếu i <0 hoặc j <0 hoặc i> =row count hoặc j> =col count hoặc board [i, j] ='X' hoặc board [i, j] ='1', thì trả về
  • bảng [i, j]:=1
  • gọi make_one (voard, i + 1, j), make_one (voard, i - 1, j), make_one (voard, i, j + 1), make_one (voard, i, j - 1)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

class Solution(object):
   def solve(self, board):
      if not board:
         return board
      for i in range(len(board)):
         if board[i][0]=='O':
            self.make_one(board,i,0)
         if board[i][len(board[0])-1] == 'O':
            self.make_one(board,i,len(board[0])-1)
      for i in range(len(board[0])):
         if board[0][i]=='O':
            self.make_one(board,0,i)
         if board[len(board)-1][i] == 'O':
            self.make_one(board,len(board)-1,i)
      for i in range(len(board)):
         for j in range(len(board[i])):
            if board[i][j]=='O':
               board[i][j]='X'
            elif board[i][j]=='1':
               board[i][j]='O'
      return board
   def make_one(self, board,i,j):
      if i<0 or j<0 or i>=len(board) or j>=len(board[0]) or board[i][j]=='X' or board[i]   [j]=='1':
         return
      board[i][j]='1'
      self.make_one(board,i+1,j)
      self.make_one(board,i-1,j)
      self.make_one(board,i,j+1)
      self.make_one(board,i,j-1)
ob1 = Solution()
print(ob1.solve([["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]]))

Đầu vào

[["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]]

Đầu ra

[['X', 'X', 'X', 'X'], ['X', 'X', 'X', 'X'], ['X', 'X', 'X', 'X'], ['X', 'O', 'X', 'X']]