LeetCode0529.扫雷游戏【中】【Python】【DFS】ProblemLeetCodeLet'splaytheMinesweepergame(Wikipedia,onlinegame)!Youaregivena2D代表游戏板的字符矩阵。'M'代表一个未显露的地雷,'E'代表一个未显露的空方块,'B'代表一个显露的空白方块,没有相邻(上,下,左,右,所有4个对角线)地雷,数字('1'到'8')代表有多少地雷与这个显示的方块相邻,最后'X'代表一个显示的地雷。现在给定所有未显示的方块('M'或'E)中的下一个点击位置(行和列索引)'),根据以下规则在显示此位置后返回棋盘:如果显示地雷('M'),则游戏结束-将其更改为'X'。如果一个空方块('E')带有没有显示相邻的地雷,然后将其更改为显示空白('B')及其所有相邻的未显示方块s应该递归地揭示。如果一个空方块('E')至少有一个相邻的地雷被揭示,则将其更改为代表相邻地雷数量的数字('1'到'8')。当没有时返回板将显示更多正方形。示例1:输入:[['E','E','E','E','E'],['E','E','M','E','E'],['E','E','E','E','E'],['E','E','E','E','E']]点击:[3,0]输出:[['B','1','E','1','B'],['B','1','M','1','B'],['B','1','1','1','B'],['B','B','B','B','B']]示例2:输入:[['B','1','E','1','B'],['B','1','M','1','B'],['B','1','1','1','B'],['B','B','B','B','B']]点击:[1,2]输出:[['B','1','E','1','B'],['B','1','X','1','B'],['B','1','1','1','B'],['B','B','B','B','B']]注:输入矩阵的高和范围宽度为[1,50]。点击位置只会是一个未显示的方块('M'或'E'),这也意味着输入板至少包含一个可点击的方块。输入board不会是游戏结束时的阶段(一些地雷已经被发现)。为简单起见,在此问题中应忽略未提及的规则。例如,您不需要在游戏结束时揭露所有未揭露的地雷,考虑您将赢得比赛或标记任何方块的任何情况。一起玩扫雷吧!给定一个代表游戏盘的二维字符矩阵'M'代表一个出土的地雷,'E'代表一个出土的空方块,'B'代表没有相邻(上,下,左,右,和所有4个对角线)的出土地雷的空方格,数字('1'到'8')表示与出土方格相邻的地雷数量,'X'表示出土了一个地雷。现在给定所有未挖方块('M'或'E')中的下一个点击位置(行列索引),根据以下规则在点击相应位置后返回相应的面板:如果一个地雷('M')被挖出,游戏结束-将其更改为“X”。如果开采了一个没有相邻地雷的空块('E'),将其修改为('B'),并且应该递归地显示所有相邻的未开采块。如果在至少一个地雷附近开采了一个空方块('E'),请将其修改为一个数字('1'到'8'),指示相邻地雷的数量。如果在此单击期间没有更多方块可显示,则返回面板。示例1:输入:[['E','E','E','E','E'],['E','E','M','E','E'],['E','E','E','E','E'],['E','E','E','E','E']]点击:[3,0]输出:[['B','1','E','1','B'],['B','1','M','1','B'],['B','1','1','1','B'],['B','B','B','B','B']]示例2:输入:[['B','1','E','1','B'],['B','1','M','1','B'],['B','1','1','1','B'],['B','B','B','B','B']]点击:[1,2]输出:[['B','1','E','1','B'],['B','1','X','1','B'],['B','1','1','1','B'],['B','B','B','B','B']]注:输入矩阵的宽高范围从[1,50]。可点击的位置只能是未被开采的方块('M'或'E'),这也意味着该面板至少包含一个可点击的方块。输入面板不会处于游戏结束状态(即地雷已被开采)。为简单起见,本题中未提及的规则可以忽略。例如,你不需要在游戏结束时挖掘所有的地雷,考虑所有你可能赢得游戏或标记方块的情况。想法DFS1。初始位置是雷,直接变X退出2.初始位置不是我的:然后查看这个点的周围情况:1.如果这个点是B,可以搜索周围的点(搜索到的状态点只能是E,否则会重复查找)2.否则停止点击时间复杂度:O(m*n)空间复杂度:O(m*n)Python3代码类解决方案:defupdateBoard(self,board:List[List[str]],click:List[int])->List[List[str]]:#初始位置为Thunder,如果board[click[0]][click[1]]直接换成X退出=='M':board[click[0]][click[1]]='X'returnboardself.m,self.n=len(board),len(board[0])direction=((1,0),(-1,0),(0,1),(0,-1),(1,1),(-1,1),(-1,-1),(1,-1))#检查周围的地雷Casedefcheck(i,j):cnt=0forx,yindirection:x,y=x+i,y+jif0<=x
