扫雷群规则资讯

(微信群)[LeetCode]529.扫雷游戏抢红包群

发布人:微信禁抢红包群赚钱吗 来源:微信抢红包群,支付宝红包群,红包群,红包扫雷群发布时间:2022-08-18 09:32:46 热度:

微信扫雷红包群二维码

题目描述:

让我们一起来玩扫雷游戏!

给定一个代表游戏板的二维字符矩阵。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]] Click : [3,0] 输出: [[B, 1, E, 1, B], [B, 1, M, 1, B], [B, 1, 1, 1, B], [B, B, B, B, B]]

思路:

首先,我们理清思路.题意是要求我们点击一次后的布局.

红包扫雷禁枪群中介

布局有四种状态:M,E,B,数字,X

M相邻为数字状态,但是我们要找出每个位置的数字多少,用字典解决

接下来可以用深度遍历,也可以广度遍历,

抢红包微信群软件下载

看代码理解!

代码:

classSolution(object):defupdateBoard(self,board,click):""":type board: List[List[str]]:type click: List[int]:rtype: List[List[str]]"""深度遍历fromcollectionsimportdefaultdictdilei=defaultdict(int)orients=[(-1,0),(1,0),(0,-1),(0,1),(-1,-1),(-1,1),(1,-1),(1,1)]visited=set()row=len(board)col=len(board[0])找出地雷周围位置个数foriinrange(row):forjinrange(col):ifboard[i][j]=="M":forx,yinorients:if0<=i+x<rowand0<=j+y<col:dilei[(i+x,j+y)]+=1defdfs(click_i,click_j):visited.add((click_i,click_j))ifboard[click_i][click_j]=="M":board[click_i][click_j]="X"returnif(click_i,click_j)indilei:board[click_i][click_j]=str(dilei[(click_i,click_j)])returnifboard[click_i][click_j]=="E":board[click_i][click_j]="B"forx,yinorients:X=click_i+xY=click_j+yif0<=X<rowand0<=Y<coland(X,Y)notinvisited:dfs(X,Y)dfs(*click)returnboard广度遍历defupdateBoard1(self,board,click):fromcollectionsimportdefaultdict,dequedilei=defaultdict(int)orients=[(-1,0),(1,0),(0,-1),(0,1),(-1,-1),(-1,1),(1,-1),(1,1)]visited=set()stack=deque()stack.appendleft(click)row=len(board)col=len(board[0])foriinrange(row):forjinrange(col):ifboard[i][j]=="M":forx,yinorients:if0<=i+x<rowand0<=j+y<col:dilei[(i+x,j+y)]+=1whilestack:x,y=stack.pop()visited.add((x,y))ifboard[x][y]=="M":board[x][y]="X"breakif(x,y)indilei:board[x][y]=str(dilei[(x,y)])continueifboard[x][y]=="E":board[x][y]="B"fori,jinorients:X=x+iY=y+jif0<=X<rowand0<=Y<coland(X,Y)notinvisited:stack.appendleft([X,Y])returnboard

2022扫雷红包群

... 
上一篇 : (抢红包群)谁也没有想到,最后拯救国产单机游戏未来的,居然是
下一篇 : (微信扫雷群)最新通报!5月19日天津新增15例阳性感染者!
猜你喜欢的微信抢红包群,支付宝红包群,红包群,红包扫雷群