leetcode 529. 扫雷游戏
2019-03-12 17:33
405 查看
-
题目链接 https://leetcode-cn.com/problems/minesweeper/comments/
-
题目描述
给定一个代表游戏板的二维字符矩阵。 'M' 代表一个未挖出的地雷,'E' 代表一个未挖出的空方块,'B' 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字('1' 到 '8')表示有多少地雷与这块已挖出的方块相邻,'X' 则表示一个已挖出的地雷。
现在给出在所有未挖出的方块中('M'或者'E')的下一个点击位置(行和列索引),根据以下规则,返回相应位置被点击后对应的面板:
- 如果一个地雷('M')被挖出,游戏就结束了- 把它改为 'X'。
- 如果一个没有相邻地雷的空方块('E')被挖出,修改它为('B'),并且所有和其相邻的方块都应该被递归地揭露。
- 如果一个至少与一个地雷相邻的空方块('E')被挖出,修改它为数字('1'到'8'),表示相邻地雷的数量。
- 如果在此次点击中,若无更多方块可被揭露,则返回面板。
-
示例 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
相关文章推荐
- [LeetCode] Minesweeper 扫雷游戏
- [源码和文档分享]基于Java Swing实现的扫雷游戏
- 关于扫雷游戏学习笔记(二)
- Leetcode做题日记:55. 跳跃游戏(PYTHON)
- 如何写一个扫雷游戏
- Unity制作扫雷游戏
- JS编写的扫雷游戏(简单易懂)
- 扫雷游戏(C语言实现)
- LeetCode 36. Valid Sudoku(数独游戏)
- 扫雷游戏
- Leetcode刷题15-292.Nim游戏(C++)
- linux下的图形界面扫雷游戏(Gtk+2.0)
- [LeetCode] 45. Jump Game II 跳跃游戏 II
- [LeetCode] Dungeon Game 地牢游戏
- 用PHP做的扫雷游戏!!!!
- 扫雷游戏的秘密
- C#扫雷游戏详细介绍
- MIDP1.0游戏完整实现-双人扫雷1.0(一)
- LeetCode 45. Jump Game II(跳跃游戏Ⅱ)
- java 实现一个基于控制台的 扫雷 游戏