本文主要是介绍[leetcode] 529. Minesweeper,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
[leetcode] 529. Minesweeper
描述
就是大家都玩过的扫雷游戏
题目链接529. Minesweeper
分析
题目很简单,读懂规则就好,只用点击一次,而且给你的输入要么是点击’M’,要么是’E’。’M’的处理很简单。
碰到’E’的处理:
1.首先统计周围8领域有没有地雷,如果有,则置为相应的数目,返回;
2.如果周围没有地雷,对领域点深搜,还是依照这个规则。
我的代码
class Solution {
public:vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {if (board[click[0]][click[1]]=='M'){board[click[0]][click[1]]='X';return board;}else{int len=board.size();int wid=board[0].size();int neig[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};int sumMine=0;for (int i=0; i<8; i++){int indI=click[0]+neig[i][0];int indJ=click[1]+neig[i][1];if (indI>=0 && indI<len && indJ>=0 && indJ<wid){sumMine+=(board[indI][indJ]=='M')?1:0;}}if (!sumMine){board[click[0]][click[1]]='B';for (int i=0; i<8; i++){int indI=click[0]+neig[i][0];int indJ=click[1]+neig[i][1];vector<int> clk;clk.push_back(indI);clk.push_back(indJ);if (indI>=0 && indI<len && indJ>=0 && indJ<wid){dfs(board,clk);}}}else board[click[0]][click[1]]='0'+sumMine;}return board;}private:void dfs(vector<vector<char>>& board, vector<int>& click){if (board[click[0]][click[1]]!='E'){return ;}else{int len=board.size();int wid=board[0].size();int neig[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};int sumMine=0;for (int i=0; i<8; i++){int indI=click[0]+neig[i][0];int indJ=click[1]+neig[i][1];if (indI>=0 && indI<len && indJ>=0 && indJ<wid){sumMine+=((board[indI][indJ]=='M')?1:0);}}if (!sumMine){board[click[0]][click[1]]='B';for (int i=0; i<8; i++){int indI=click[0]+neig[i][0];int indJ=click[1]+neig[i][1];vector<int> clk;clk.push_back(indI);clk.push_back(indJ);if (indI>=0 && indI<len && indJ>=0 && indJ<wid){dfs(board,clk);}}}else board[click[0]][click[1]]='0'+sumMine;}}
};
这篇关于[leetcode] 529. Minesweeper的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!