写点什么

[8.20]leetcode 每日一题,

用户头像
一起搞稽
关注
发布于: 2020 年 08 月 20 日
[8.20]leetcode每日一题,

题为扫雷游戏,一看题就知道是图的遍历问题,直接上dfs或者bfs框架,然后往里面填东西,这里有八个方向,所以使用xG和yG俩数组来模拟每个方向。{(0,1),(0,-1)...(-1,1),(-1,-1)}



点开一个点,会判断它是不是雷:



点到 M,就是踩雷了,更新为X,游戏结束。

点到 E,就是空地,分两种情况:

周围8个格子有地 雷,更新为雷数。

没有地 雷,更新为 B,并继续探测这8个格子。



class Solution {
int[] xG = {0, 1, -1, 0, 1, -1, -1, 1};
int[] yG = {1, 0, 0, -1, 1, -1, 1, -1};
public char[][] updateBoard(char[][] board, int[] click) {
int x = click[0];
int y = click[1];
if (board[x][y] == 'M') {
board[x][y] = 'X';
return board;
} else {
dfs(board, x, y);
}
return board;
}
public void dfs(char[][] board, int x, int y) {
int count = 0;
for (int i = 0; i < 8; i++) {
int tx = x + xG[i];
int ty = y + yG[i];
if (tx >= 0 && tx < board.length && ty >= 0 && ty < board[0].length &&board[tx][ty] == 'M') {
count++;
}
}
if (count > 0) {
board[x][y] = (char) (count + '0');
} else {
board[x][y] = 'B';
for (int i = 0; i < 8; i++) {
int tx = x + xG[i];
int ty = y + yG[i];
if (tx >= 0 && tx < board.length && ty >= 0 && ty < board[0].length) {
if (board[tx][ty] == 'E') {
dfs(board, tx, ty);
}
}
}
}
}
}



用户头像

一起搞稽

关注

还未添加个人签名 2020.08.19 加入

还未添加个人简介

评论

发布
暂无评论
[8.20]leetcode每日一题,