您的位置:首页 > 其它

leetcode 529. 扫雷游戏

2019-03-12 17:33 405 查看
  1. 题目链接 https://leetcode-cn.com/problems/minesweeper/comments/

  2. 题目描述

    给定一个代表游戏板的二维字符矩阵。 'M' 代表一个未挖出的地雷,'E' 代表一个未挖出的空方块,'B' 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字('1' 到 '8')表示有多少地雷与这块已挖出的方块相邻,'X' 则表示一个已挖出的地雷。

    现在给出在所有未挖出的方块中('M'或者'E')的下一个点击位置(行和列索引),根据以下规则,返回相应位置被点击后对应的面板:

  3. 如果一个地雷('M')被挖出,游戏就结束了- 把它改为 'X'
  4. 如果一个没有相邻地雷的空方块('E')被挖出,修改它为('B'),并且所有和其相邻的方块都应该被递归地揭露。
  5. 如果一个至少与一个地雷相邻的空方块('E')被挖出,修改它为数字('1'到'8'),表示相邻地雷的数量。
  6. 如果在此次点击中,若无更多方块可被揭露,则返回面板。
  7. 示例 1:

    [code]输入:
    
    [['E', 'E', 'E', 'E', 'E'],
    ['E', 'E', 'M', 'E', 'E'],
    ['E', 'E', 'E', 'E', 'E'],
    ['E', 'E', 'E', 'E', 'E']]
    
    Click : [3,0]
    
    输出:
    
    [['B', '1', 'E', '1', 'B'],
    ['B', '1', 'M', '1', 'B'],
    ['B', '1', '1', '1', 'B'],
    ['B', 'B', 'B', 'B', 'B']]
    示例 2:
    [code]输入:
    
    [['B', '1', 'E', '1', 'B'],
    ['B', '1', 'M', '1', 'B'],
    ['B', '1', '1', '1', 'B'],
    ['B', 'B', 'B', 'B', 'B']]
    
    Click : [1,2]
    
    输出:
    
    [['B', '1', 'E', '1', 'B'],
    ['B', '1', 'X', '1', 'B'],
    ['B', '1', '1', '1', 'B'],
    ['B', 'B', 'B', 'B', 'B']]
  • 解题思路

      根据条件,进行DFS即可, 注意搜索过的格子要作好记录。
  • 代码

      python
      [code]class Solution:
      def updateBoard(self, board, click):
      x, y = click
      N, M = len(board), len(board[0])
      if board[x][y] == 'M':
      board[x][y] = 'X'
      return board
      nabe = [(0, 1), (0, -1), (1, 1), (1, -1), (1, 0), (-1, 0), (-1, 1), (-1, -1)]
      
      def _dfs(i, j):
      nonlocal board
      if board[i][j] != 'E': return
      mine = 0
      for k, l in nabe:
      mine += 0 <= i + k < N and 0 <= j + l < M and board[i + k][j + l] == 'M'
      if not mine:
      board[i][j] = 'B'
      for k, l in nabe:
      if 0 <= i + k < N and 0 <= j + l < M and board[i + k][j + l] == 'E':
      _dfs(i + k, j + l)
      else:
      board[i][j] = str(mine)
      
      _dfs(x, y)
      return board

       

  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: