題目描述
讓我們一起來玩掃雷遊戲!
給定乙個代表遊戲板的二維字元矩陣。 'm' 代表乙個未挖出的地雷,'e' 代表乙個未挖出的空方塊,'b' 代表沒有相鄰(上,下,左,右,和所有4個對角線)地雷的已挖出的空白方塊,數字('1' 到 '8')表示有多少地雷與這塊已挖出的方塊相鄰,'x' 則表示乙個已挖出的地雷。
如果乙個地雷('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'),這也意味著面板至少包含乙個可點選的方塊。
輸入面板不會是遊戲結束的狀態(即有地雷已被挖出)。
簡單起見,未提及的規則在這個問題中可被忽略。例如,當遊戲結束時你不需要挖出所有地雷,考慮所有你可能贏得遊戲或標記方塊的情況。
題解:
當前點選的是【未挖出來的雷】,我們將其改為x即可,表示點到了雷,然後結束。
當前點選的是【為挖出的空方塊】,我們需要統計他周圍相鄰(八個)的方塊裡的地雷的數量cnt(即m的數量)。
如果cnt>0,就將當前方塊改為cnt的數字(附近的雷數)
如果cnt為0,則將其改為b,並遞迴計算周圍八個未挖出的方塊,如果沒有更多方塊可以被揭露,則返回面板。
實現:
public char updateboard (char board, int click) else
return board;
}//左、左上、上、右上、右、右下、下、左下
int vx = new int ;
int vy = new int ;
private void dfs (char board, int x, int y)
if (board[currentx][currenty] == 'm')
}//周圍m個數不為0時,將[x,y]處的值設定成cnt數字
if (cnt > 0)
//如果周圍沒有m(雷)時
LeetCode 529 掃雷遊戲
529.掃雷遊戲 讓我們一起來玩掃雷遊戲!給定乙個代表遊戲板的二維字元矩陣。m 代表乙個未挖出的地雷,e 代表乙個未挖出的空方塊,b 代表沒有相鄰 上,下,左,右,和所有4個對角線 地雷的已挖出的空白方塊,數字 1 到 8 表示有多少地雷與這塊已挖出的方塊相鄰,x 則表示乙個已挖出的地雷。典型的bf...
Leetcode 廣搜 深搜 掃雷遊戲(529)
讓我們一起來玩掃雷遊戲!給定乙個代表遊戲板的二維字元矩陣。m 代表乙個未挖出的地雷,e 代表乙個未挖出的空方塊,b 代表沒有相鄰 上,下,左,右,和所有4個對角線 地雷的已挖出的空白方塊,數字 1 到 8 表示有多少地雷與這塊已挖出的方塊相鄰,x 則表示乙個已挖出的地雷。如果乙個地雷 m 被挖出,遊...
小遊戲 掃雷
c語言實現的乙個簡單的掃雷遊戲 介面簡單,功能 首次踩雷的,會換雷。掃雷有九宮格擴撒 環境 vs2015 如下 game.h pragma once ifndef game h define game h define rows 11 define cols 11 define num 9 incl...