算法——矩阵:对于边界元素的处理

. - 力扣(LeetCode)

题目简述:扫雷,点击一个格子,返回整个地图的下一个状态。

对于边界元素,可以设置两个数组,index_row,index_col,遍历到一个格子需要搜索其周围格子时,使当前格子的值一次加上数组的值,如果发现加上之后的值越界了则跳过此格子。

这样写很清晰,节省了很多代码量。

class Solution {
public:
    vector<vector<int>>hasboom;
    int index_row[8]={0,0,1,1,1,-1,-1,-1},index_col[8]={-1,1,-1,1,0,-1,1,0};

    void count(int row,int col)
    {
        for(int i=0;i<8;i++)
        {
            int temprow=row+index_row[i],tempcol=col+index_col[i];
            if(temprow>=0&&temprow<hasboom.size()&&tempcol>=0&&tempcol<hasboom[0].size())
            hasboom[temprow][tempcol]++;
        }
        // if(row>0)
        // {
        //     hasboom[row-1][col]++;
        //     if(col>0)hasboom[row-1][col-1]++;
        //     if(col<hasboom[0].size()-1)hasboom[row-1][col+1]++;
        // }
        // if(row<hasboom.size()-1)
        // {
        //     hasboom[row+1][col]++;
        //     if(col>0)hasboom[row+1][col-1]++;
        //     if(col<hasboom[0].size()-1)hasboom[row+1][col+1]++;
        // }
        // if(col>0)hasboom[row][col-1]++;
        // if(col<hasboom[0].size()-1)hasboom[row][col+1]++;
    }

    vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {
        hasboom.resize(board.size());
        for(int i=0;i<board.size();i++)
        {
            hasboom[i].resize(board[0].size(),0);
        }
        for(int i=0;i<hasboom.size();i++)
        {
            for(int j=0;j<hasboom[0].size();j++)
            {
                if(board[i][j]=='M')
                {
                    count(i,j);
                }
            }
        }
        queue<pair<int,int>>q;
        q.emplace(click[0],click[1]);
        while(!q.empty())
        {
            auto[row,col]=q.front();
            q.pop();
            if(board[row][col]=='M')
            {
                board[row][col]='X';
            }
            else if(board[row][col]=='E')
            {
                if(hasboom[row][col]==0)
                {
                    board[row][col]='B';
                    for(int index=0;index<8;index++)
                    {
                        int temprow=row+index_row[index];
                        int tempcol=col+index_col[index];
                        if(temprow<0||temprow>=board.size()||tempcol<0||tempcol>=board[0].size())
                        continue;
                        else if(board[temprow][tempcol]=='M'||board[temprow][tempcol]=='E')
                        q.emplace(temprow,tempcol);
                    }


                    // if(row>0)
                    // {
                    //     if(board[row-1][col]=='M'||board[row-1][col]=='E')
                    //     q.emplace(row-1,col);
                    //     if(col>0&&(board[row-1][col-1]=='M'||board[row-1][col-1]=='E'))
                    //     q.emplace(row-1,col-1);
                    //     if(col<board[0].size()-1&&(board[row-1][col+1]=='M'||board[row-1][col+1]=='E'))
                    //     q.emplace(row-1,col+1);
                    // }
                    // if(col>0&&(board[row][col-1]=='M'||board[row][col-1]=='E'))
                    // q.emplace(row,col-1);
                    // if(col<board[0].size()-1&&(board[row][col+1]=='M'||board[row][col+1]=='E'))
                    // q.emplace(row,col+1);
                    // if(row<board.size()-1)
                    // {
                    //     if(board[row+1][col]=='M'||board[row+1][col]=='E')
                    //     q.emplace(row+1,col);
                    //     if(col>0&&(board[row+1][col-1]=='M'||board[row+1][col-1]=='E'))
                    //     q.emplace(row+1,col-1);
                    //     if(col<board[0].size()-1&&(board[row+1][col+1]=='M'||board[row+1][col+1]=='E'))
                    //     q.emplace(row+1,col+1);
                    // }
                }
                else
                {
                    board[row][col]='0'+hasboom[row][col];
                }
            }
        }
        return board;
    }
};

相关推荐

  1. 算法——矩阵对于边界元素处理

    2024-04-02 09:02:04       22 阅读
  2. 计算矩阵边缘元素之和(c++)

    2024-04-02 09:02:04       35 阅读
  3. torch中根据矩阵对应元素抽取矩阵

    2024-04-02 09:02:04       22 阅读
  4. [Kadane算法,前缀和思想]元素和最大矩阵

    2024-04-02 09:02:04       33 阅读
  5. 二维数组_计算矩阵边缘元素之和

    2024-04-02 09:02:04       20 阅读
  6. CG向量和矩阵元素获取

    2024-04-02 09:02:04       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-02 09:02:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-02 09:02:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-02 09:02:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-02 09:02:04       18 阅读

热门阅读

  1. 动态规划 Leetcode 1143 最长公共子序列

    2024-04-02 09:02:04       15 阅读
  2. 拓扑排序(习题笔记 思路整理)之一

    2024-04-02 09:02:04       13 阅读
  3. 无极低码:同时删除两张表中的记录

    2024-04-02 09:02:04       15 阅读
  4. 阿里云效codeup如何执行github flow工作流

    2024-04-02 09:02:04       15 阅读
  5. 机器学习之局部异常因子算法(Local Outlier Factor)

    2024-04-02 09:02:04       12 阅读
  6. inout模块设计

    2024-04-02 09:02:04       13 阅读
  7. 【DevOps工具篇】 OpenLDAP服务器安装和配置方法

    2024-04-02 09:02:04       10 阅读
  8. PLC数据类型介绍

    2024-04-02 09:02:04       18 阅读
  9. Linux常用命令行介绍

    2024-04-02 09:02:04       15 阅读