# SE103 Week 8 Review ## [Minesweeper](https://leetcode.com/problems/minesweeper/) ``` from collections import deque class Solution: directions = [[-1, -1], [-1, 0], [-1, 1], [0, 1], [1, 1], [1, 0], [1, -1], [0, -1]] def updateBoard(self, board: List[List[str]], click: List[int]) -> List[List[str]]: clickY, clickX = click if board[clickY][clickX] == 'M': board[clickY][clickX] = 'X' return board stack = deque([(clickY, clickX)]) visited = set((clickY, clickX)) while len(stack) > 0: y, x = stack.pop() numAdjacentMines = self.getNumAdjacentMines(y, x, board) board[y][x] = 'B' if numAdjacentMines == 0 else str(numAdjacentMines) if numAdjacentMines > 0: continue for direction in Solution.directions: newY, newX = direction[0] + y, direction[1] + x if not self.isWithinBounds(newY, newX, board): continue elif board[newY][newX] == 'E' and (newY, newX) not in visited: stack.append((newY, newX)) visited.add((newY, newX)) return board def getNumAdjacentMines(self, y, x, board): numAdjacentMines = 0 for direction in Solution.directions: newY, newX = direction[0] + y, direction[1] + x if not self.isWithinBounds(newY, newX, board): continue elif board[newY][newX] == 'M': numAdjacentMines += 1 return numAdjacentMines def isWithinBounds(self, y, x, board): height, width = len(board), len(board[0]) return 0 <= y < height and 0 <= x < width ```