博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MineSweeper
阅读量:4970 次
发布时间:2019-06-12

本文共 3740 字,大约阅读时间需要 12 分钟。

Let's play the minesweeper game (, )!

You are given a 2D char matrix representing the game board. 'M' represents an unrevealed mine, 'E' represents an unrevealed empty square, 'B' represents a revealed blank square that has no adjacent (above, below, left, right, and all 4 diagonals) mines, digit ('1' to '8') represents how many mines are adjacent to this revealed square, and finally 'X' represents a revealed mine.

Now given the next click position (row and column indices) among all the unrevealed squares ('M' or 'E'), return the board after revealing this position according to the following rules:

 

  1. If a mine ('M') is revealed, then the game is over - change it to 'X'.
  2. If an empty square ('E') with no adjacent mines is revealed, then change it to revealed blank ('B') and all of its adjacent unrevealed squares should be revealed recursively.
  3. If an empty square ('E') with at least one adjacent mine is revealed, then change it to a digit ('1' to '8') representing the number of adjacent mines.
  4. Return the board when no more squares will be revealed.

Example 1:

Input: [['E', 'E', 'E', 'E', 'E'], ['E', 'E', 'M', 'E', 'E'], ['E', 'E', 'E', 'E', 'E'], ['E', 'E', 'E', 'E', 'E']]Click : [3,0]Output: [['B', '1', 'E', '1', 'B'], ['B', '1', 'M', '1', 'B'], ['B', '1', '1', '1', 'B'], ['B', 'B', 'B', 'B', 'B']]Explanation:

 

Example 2:

Input: [['B', '1', 'E', '1', 'B'], ['B', '1', 'M', '1', 'B'], ['B', '1', '1', '1', 'B'], ['B', 'B', 'B', 'B', 'B']]Click : [1,2]Output: [['B', '1', 'E', '1', 'B'], ['B', '1', 'X', '1', 'B'], ['B', '1', '1', '1', 'B'], ['B', 'B', 'B', 'B', 'B']]Explanation:

 

 

Note:

  1. The range of the input matrix's height and width is [1,50].
  2. The click position will only be an unrevealed square ('M' or 'E'), which also means the input board contains at least one clickable square.
  3. The input board won't be a stage when game is over (some mines have been revealed).
  4. For simplicity, not mentioned rules should be ignored in this problem. For example, you don't need to reveal all the unrevealed mines when the game is over, consider any cases that you will win the game or flag any squares.

 

1 public class Solution { 2     public char[][] updateBoard(char[][] board, int[] click) { 3         int m = board.length, n = board[0].length; 4         int x = click[0], y = click[1]; 5          6         if (board[x][y] == 'M') { 7             board[x][y] = 'X'; 8         } 9         else if (board[x][y] == 'E') {10             int count = countNeighbors(board, x, y);11             if (count == 0) {12                 board[x][y] = 'B';13                 for (int i = x - 1; i <= x + 1; i++) {14                     for (int j = y - 1; j <= y + 1; j++) {15                         if (i != x || j != y) {16                             if (i >= 0 && i < m && j >= 0 && j < n && board[i][j] == 'E') {17                                 int[] newClick = { i, j };18                                 updateBoard(board, newClick);19                             }20                         }21                     }22                 }23             }24             else {25                 board[x][y] = (char) (count + '0');26             }27         } 28         29         return board;30     }31     32     private int countNeighbors(char[][]board, int x, int y) {33         int count = 0, m = board.length, n = board[0].length;34         for (int i = x - 1; i < x + 2; i++) {35             for (int j = y - 1; j < y + 2; j++) {36                 if (i != x || j != y) {37                     if (i >= 0 && j >= 0 && i < m && j < n && board[i][j] == 'M')38                         count++;39                 }40             }41         }42         return count;43     }44 }

 

转载于:https://www.cnblogs.com/amazingzoe/p/6479949.html

你可能感兴趣的文章
python 多进程和多线程的区别
查看>>
sigar
查看>>
iOS7自定义statusbar和navigationbar的若干问题
查看>>
[Locked] Wiggle Sort
查看>>
deque
查看>>
c#中从string数组转换到int数组
查看>>
数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
查看>>
java小技巧
查看>>
POJ 3204 Ikki's Story I - Road Reconstruction
查看>>
iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
查看>>
toad for oracle中文显示乱码
查看>>
SQL中Group By的使用
查看>>
错误org/aopalliance/intercept/MethodInterceptor解决方法
查看>>
两个表格中数据不用是一一对应关系--来筛选不同数据,或者相同数据
查看>>
hiho_offer收割18_题解报告_差第四题
查看>>
AngularJs表单验证
查看>>
静态方法是否属于线程安全
查看>>
02号团队-团队任务3:每日立会(2018-12-05)
查看>>
SQLite移植手记1
查看>>
js05-DOM对象二
查看>>