Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの周辺地域


XとOを含む2Dボードがあるとします。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

これを解決するには、次の手順に従います-

  • ボードがない場合は、空白のボードを返却してください
  • 0から行数の範囲のiの場合– 1 −
    • board [i、0] =‘O’の場合、make_one(board、i、0)
    • board [i、行の長さ-1] =‘O’の場合、make_one(board、i、行の長さ– 1)
  • 0から列数までの範囲のiの場合– 1 −
    • board [0、i] =‘O’の場合、make_one(board、0、i)
    • board [count of row – 1、i] =‘O’の場合、make_one(board、count of row – 1、i)
  • 0から行数の範囲のiの場合
    • 0から列数の範囲のjの場合
      • board [i、j] =‘O’の場合、board [i、j] =‘X’、それ以外の場合、board [i、j] =‘O’
  • make_oneは次のようになります-
  • i<0またはj<0またはi>=行数またはj>=列数またはboard[i、j] ='X'またはboard[i、j] ='1'の場合、戻り値
  • board [i、j]:=1
  • make_one(voard、i + 1、j)、make_one(voard、i-1、j)、make_one(voard、i、j + 1)、make_one(voard、i、j-1)を呼び出す
  • >

理解を深めるために、次の実装を見てみましょう-

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"]]))

入力

[["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']]

  1. Pythonで行列内の囲まれた島の数を数えるプログラム

    バイナリ行列があるとします。ここで、1は土地を表し、0は水を表します。私たちが知っているように、島は周囲が水に囲まれているグループ化された1のグループです。完全に囲まれた島の数を見つける必要があります。 したがって、入力が次のような場合 3つの島があるため、出力は2になりますが、そのうちの2つは完全に囲まれています。 これを解決するには、次の手順に従います- 関数dfs()を定義します。これにはi、jが必要です iとjが行列の範囲内にない場合、 Falseを返す matrix [i、j]が0と同じ場合、 Trueを返す matrix [i、j]:=0 a:=df

  2. Pythonのissuperset()

    この記事では、Pythonでのissuperset()と、さまざまな分野でのその実装について学習します。 このメソッドは、セットBのすべての要素に引数として渡されるすべての要素セットAが含まれている場合はブール値Trueを返し、Aのすべての要素がBに存在しない場合はfalseを返します。 これは、BがAのスーパーセットである場合、それを意味します returns true; else False 例 いくつかの例を見てみましょう A = {'t','u','t','o','r','i',