zoukankan      html  css  js  c++  java
  • 529. 扫雷游戏

    题目

    529. 扫雷游戏

    我的思路

    深搜:
    如果点击的方块是‘M’,那么直接修改为X,并返回;
    如果点击的方块是‘E’,先判断周围有多少个M,如果有n个,那么把字符修改为‘n’;如果n是0,那么对周围的个方块依次重复“深搜”,并修改为‘B’。
    返回

    时间复杂度和空间复杂度都是Omn也就是矩阵大小

    我的实现

    class Solution {
    public:
        void count(vector<vector<char>>& board, vector<int>& click){
            vector<int> x = {0,0,1,1,1,-1,-1,-1};
            vector<int> y = {1,-1,0,1,-1,0,1,-1};
            int result= 0;
            for(int i=0;i<8;i++){
                if((x[i]+click[0])>=0&&(x[i]+click[0])<board.size()&&(click[1]+y[i])>=0&&(click[1]+y[i])<board[0].size()){
                    if(board[(x[i]+click[0])][(y[i]+click[1])]=='M'){
                        result++;
                    }
                }
            }
            if (result==0){
                for(int i=0;i<8;i++){
                if((x[i]+click[0])>=0&&(x[i]+click[0])<board.size()&&(click[1]+y[i])>=0&&(click[1]+y[i])<board[0].size()){
                    if(board[(x[i]+click[0])][(y[i]+click[1])]=='E'){
                        vector<int> temp = {(x[i]+click[0]),(y[i]+click[1])};
                        dpSearch(board,temp);
                    }
                }
            }
                board[click[0]][click[1]]='B';
            }else{
                board[click[0]][click[1]]=result+'0';
            }
        }
        void dpSearch(vector<vector<char>>& board, vector<int>& click){
            if(click[0]<board.size()&&click[0]>=0&&click[1]>=0&&click[1]<board[0].size()){
                if(board[click[0]][click[1]]=='M'){
                    board[click[0]][click[1]] = 'X';
                    return;
                }else{
                    if(board[click[0]][click[1]]=='E'){
                         board[click[0]][click[1]]='T';
                       count(board,click);
                    }
                }
    
            }
        }
        vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {
            dpSearch(board,click);
            return board;
        }
    
    };

    拓展学习

    借助队列使用广搜也可以,当四周不存在地雷时,把四周的节点加入到队列中。

  • 相关阅读:
    python实现七段数码管显示
    词频统计实例
    分形几何中科赫雪花的绘制
    脚本实现自动化绘制
    Android查看数据库方法及工具(转)
    2011年度总结
    Bad NPObject as private data 解决方案
    LINQ学习之旅——LINQ TO SQL继承支持(转载)
    我记录开源系统1.6源码解析(一)
    2011年度总结
  • 原文地址:https://www.cnblogs.com/BoysCryToo/p/13534924.html
Copyright © 2011-2022 走看看