首页 > 学院 > 开发设计 > 正文

529. Minesweeper

2019-11-06 08:20:15
字体:
来源:转载
供稿:网友

烦的一逼,快两小时AC了,扫雷问题。 主要是对mineNum做DFS处理,得到所有的连通0。

class Solution {public: void dfs(vector<vector<char>>& board,vector<vector<char>>& mineNum,int x,int y) { for(int row=x-1;row<=x+1;row++) { for(int col=y-1;col<=y+1;col++) { if(row>=0&&row<board.size()&&col>=0&&col<board[0].size()) { if(mineNum[row][col]=='0'&&board[row][col]=='E') { board[row][col]='B'; dfs(board,mineNum,row,col); } } } } return; } vector<vector<char>> createMineNum(vector<vector<char>>& board) { vector<vector<char>> mineNum; vector<char> temp; for(int i=0;i<board[0].size();i++) temp.push_back('0'); for(int i=0;i<board.size();i++) mineNum.push_back(temp); for(int i=0;i<board.size();i++) { for(int j=0;j<board[0].size();j++) { if(board[i][j]=='M') { for(int row=i-1;row<=i+1;row++) { for(int col=j-1;col<=j+1;col++) { if(row>=0&&row<board.size()&&col>=0&&col<board[0].size()) { if(row==i&&col==j) mineNum[row][col]='M'; else { if(board[row][col]=='E') mineNum[row][col]++; } } } } } } } return mineNum; } vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) { vector<vector<char>> mineNum=createMineNum(board); /*for(int i=0;i<mineNum.size();i++) { for(int j=0;j<mineNum.size();j++) cout<<mineNum[i][j]<<endl; }*/ //return mineNum; int x=click[0]; int y=click[1]; if(board[x][y]=='M') { board[x][y]='X'; return board; } else//click E { if(mineNum[x][y]!='0') { board[x][y]=mineNum[x][y]; return board; } else//which num is 0 { //dfs all 0 in mineNum,place all board[][]='B' dfs(board,mineNum,x,y); //for all board which is next to 'B' and 'E' mine's number for(int i=0;i<board.size();i++) { for(int j=0;j<board[0].size();j++) { if(board[i][j]=='B') { for(int row=i-1;row<=i+1;row++) { for(int col=j-1;col<=j+1;col++) { if(row>=0&&row<board.size()&&col>=0&&col<board[0].size()&&board[row][col]=='E') board[row][col]=mineNum[row][col]; } } } } } } } return board; }};
上一篇:计算

下一篇:lftp

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表