Given a 2D board containing
'X'
and 'O'
, capture all regions surrounded by 'X'
.
A region is captured by flipping all
'O'
s into 'X'
s in that surrounded region .
For example,
X X X X
X O O X
X X O X
X O X X
After running your function, the board should be:
X X X X
X X X X
X X X X
X O X X
Solution:
We use backtracking to identify the elements not surrounded by 'X' and we mark those with a temporal symbol ('$'). The elements not surrounded by 'X' means that exists a path of elements 'O' to a border. So we start the backtracking algorithm with the boarders.The last thing is replacing the temporal element by 'O' and the rest elements to 'X'.
class Solution: # @param board, a 2D array # Capture all regions by modifying the input board in-place. # Do not return any value. def solve(self, board): if len(board)==0: return for row in range(0,len(board)): self.mark(board,row,0) self.mark(board,row,len(board[0])-1) for col in range(0, len(board[0])): self.mark(board, 0, col) self.mark(board, len(board)-1, col) for row in range(0,len(board)): for col in range(0, len(board[0])): if board[row][col]=='$': board[row][col] = 'O' else: board[row][col] = 'X' def mark(self, board, row, col): stack = [] nCols= len(board[0]) stack.append(row*nCols+col) while len(stack)>0: position = stack. pop() row = position // nCols col = position % nCols if board[row][col] != 'O': continue board[row][col] = '$' if row>0: stack.append((row-1)*nCols+col) if row< len(board)-1: stack.append((row+1)*nCols+col) if col>0: stack.append(row*nCols+col-1) if col < nCols-1: stack.append(row*nCols+col+1)
Golden Nugget Casino & Hotel - Mapyro
ReplyDeleteGolden Nugget 순천 출장샵 Casino & Hotel. Casino. Stateline, NV. Phone: 702-693-3400. 이천 출장마사지 Map. Golden 목포 출장샵 Nugget Casino & Hotel. Casino. Stateline, 춘천 출장샵 NV. Email: 전주 출장안마 info@goldennugget.com.