日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

leetcode_529. 扫雷游戏 python

發布時間:2024/1/8 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode_529. 扫雷游戏 python 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、題目內容

二、解題思路

三、代碼?


一、題目內容

讓我們一起來玩掃雷游戲!

給定一個代表游戲板的二維字符矩陣。?'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']]

解釋:

示例 2:

輸入:?

[['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']]

解釋:

注意:

輸入矩陣的寬和高的范圍為 [1,50]。
點擊的位置只能是未被挖出的方塊 ('M' 或者 'E'),這也意味著面板至少包含一個可點擊的方塊。
輸入面板不會是游戲結束的狀態(即有地雷已被挖出)。
簡單起見,未提及的規則在這個問題中可被忽略。例如,當游戲結束時你不需要挖出所有地雷,考慮所有你可能贏得游戲或標記方塊的情況。

二、解題思路

1.點擊的鄰近八個方向需要查找是否有地雷M,有則改為地雷數目(1-8)

2.若鄰近的八個方向都沒有地雷,則改為B,且遞歸查找八個方向的八個方向是否有地雷。

3.若直接點擊為地雷M,則改為X。

三、代碼?

class Solution(object):def updateBoard(self, board, click):""":type board: List[List[str]]:type click: List[int]:rtype: List[List[str]]"""L = len(board)W = len(board[0])x = click[0]y = click[1]if board[x][y] == "M":board[x][y] = "X"return boarddef dfs(x, y):if x < 0 or x >= L or y < 0 or y >= W or board[x][y] not in "EM":returnif board[x][y] == "M":returnelif board[x][y] == "E":count = 0# leftif x - 1 >= 0 and x - 1 < L and y >= 0 and y < W and board[x - 1][y] == "M":count += 1# rightif x + 1 >= 0 and x + 1 < L and y >= 0 and y < W and board[x + 1][y] == "M":count += 1# downif x >= 0 and x < L and y - 1 >= 0 and y - 1 < W and board[x][y - 1] == "M":count += 1# upif x >= 0 and x < L and y + 1 >= 0 and y + 1 < W and board[x][y + 1] == "M":count += 1# left downif x - 1 >= 0 and x - 1 < L and y - 1 >= 0 and y - 1 < W and board[x - 1][y - 1] == "M":count += 1# right downif x + 1 >= 0 and x + 1 < L and y - 1 >= 0 and y - 1 < W and board[x + 1][y - 1] == "M":count += 1# left upif x - 1 >= 0 and x - 1 < L and y + 1 >= 0 and y + 1 < W and board[x - 1][y + 1] == "M":count += 1# right upif x + 1 >= 0 and x + 1 < L and y + 1 >= 0 and y + 1 < W and board[x + 1][y + 1] == "M":count += 1if count == 0:board[x][y] = "B"dfs(x - 1, y)dfs(x + 1, y)dfs(x, y - 1)dfs(x, y + 1)dfs(x - 1, y - 1)dfs(x + 1, y - 1)dfs(x - 1, y + 1)dfs(x + 1, y + 1)else:board[x][y] = str(count)dfs(x, y)return boardif __name__ == '__main__':board = [["E","E","E","E","E"],["E","E","M","E","E"],["E","E","E","E","E"],["E","E","E","E","E"]]click = [3, 0]s = Solution()ans = s.updateBoard(board, click)print(ans)

總結

以上是生活随笔為你收集整理的leetcode_529. 扫雷游戏 python的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。