1. 程式人生 > 實用技巧 >26.掃雷一次點選

26.掃雷一次點選

class Solution {
    int dx[8]={0, 0, -1,1,1, 1,-1,-1};
    int dy[8]={1, -1, 0,0,1,-1,-1, 1};
public:
    void dfs(vector<vector<char>>& board, int i,int j){
        if(board[i][j]!='E')return;
        int cnt=0;
        for(int k=0;k<8;k++){
            if(i+dx[k]<0||i+dx[k]>=board.size()||j+dy[k]<0
||j+dy[k]>=board[0].size())continue; if(board[i+dx[k]][j+dy[k]]=='M')cnt++; } if(cnt==0){//周圍沒有雷 board[i][j]='B'; for(int k=0;k<8;k++){ if(i+dx[k]<0||i+dx[k]>=board.size()||j+dy[k]<0||j+dy[k]>=board[0].size())continue; dfs(board,i
+dx[k],j+dy[k]); } } else{ board[i][j]=cnt+'0';return; } return; } vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) { int m=click[0],n=click[1]; if(board[m][n]=='
M'){board[m][n]='X';return board;} dfs(board,m,n); return board; } };