当前位置: 首页 > news >正文

解数独 视频讲解 c++

题目描述

编写一个程序,通过填充空格来解决数独问题。

数独的解法需 遵循如下规则:

    数字 1-9 在每一行只能出现一次。
    数字 1-9 在每一列只能出现一次。
    数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)

数独部分空格内已填入了数字,空白格用 '.' 表示。

示例 1:

输入:board = [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8",".",".",".",".","6","."],["8",".",".",".","6",".",".",".","3"],["4",".",".","8",".","3",".",".","1"],["7",".",".",".","2",".",".",".","6"],[".","6",".",".",".",".","2","8","."],[".",".",".","4","1","9",".",".","5"],[".",".",".",".","8",".",".","7","9"]]
输出:[["5","3","4","6","7","8","9","1","2"],["6","7","2","1","9","5","3","4","8"],["1","9","8","3","4","2","5","6","7"],["8","5","9","7","6","1","4","2","3"],["4","2","6","8","5","3","7","9","1"],["7","1","3","9","2","4","8","5","6"],["9","6","1","5","3","7","2","8","4"],["2","8","7","4","1","9","6","3","5"],["3","4","5","2","8","6","1","7","9"]]
解释:输入的数独如上图所示,唯一有效的解决方案如下所示:


 

提示:

    board.length == 9
    board[i].length == 9
    board[i][j] 是一位数字或者 '.'
    题目数据 保证 输入数独仅有一个解

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sudoku-solver
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

讲解视频:

让电脑帮我解数独,实现曾经的幻想【Leetcode37.解数独】_哔哩哔哩_bilibili


c++代码

 

class Solution {
private:
    bool finish;
    bool rowArr[9][10],colArr[9][10],areaArr[9][10];
public:
    void init(vector<vector<char>>& board){//用于初始化三个arr数组
        memset(rowArr,false,sizeof(rowArr));
        memset(colArr,false,sizeof(colArr));
        memset(areaArr,false,sizeof(areaArr));
        for(int i=0;i<9;i++){
            for(int j=0;j<9;j++){
                if(board[i][j]!='.'){
                    rowArr[i][board[i][j]-48]=true;
                    colArr[j][board[i][j]-48]=true;
                    areaArr[getAreaIndex(i,j)][board[i][j]-48]=true;
                }
            }
        }
    }
    int getAreaIndex(int row,int col){
        return 3*(row/3)+col/3;
    }
    void dfs(vector<vector<char>>& board,int index){
        if(index==81){
            finish=true;
            return;
        }
        int row=index/9;
        int col=index%9;
        char val=board[row][col];
        if(val!='.'){
            dfs(board,index+1);
        }else{
            for(int num=1;num<10;++num){
                bool rowTemp=rowArr[row][num];
                bool colTemp=colArr[col][num];
                bool areaTemp=areaArr[getAreaIndex(row,col)][num];
                if(!rowTemp&&!colTemp&&!areaTemp){
                    rowArr[row][num]=true;
                    colArr[col][num]=true;
                    areaArr[getAreaIndex(row,col)][num]=true;
                    board[row][col]=(char)(num+48);
                    dfs(board,index+1);
                    if(finish){
                       return; 
                    }
                    rowArr[row][num]=rowTemp;
                        colArr[col][num]=colTemp;
                        areaArr[getAreaIndex(row,col)][num]=areaTemp;
                        board[row][col]='.';
                }
            }
            
        }
    }
    void solveSudoku(vector<vector<char>>& board) {
        init(board);
        finish=false;
        dfs(board,0);
    }
};

相关文章:

  • kubernetes 网络
  • 运维流程化和标准化
  • LeetCode104. 二叉树的最大深度和N叉树的最大深度
  • Games104 引擎工具链笔记
  • 如何梳理当天的事情?
  • 【历年NeurIPS论文下载】一文了解NeurIPS国际顶会(含NeurIPS2022)
  • 《JVM学习笔记》字节码基础
  • Java 学习 --SpringBoot 常用注解详解
  • 基于springboot网上书城系统
  • Java项目:JSP药店药品商城管理系统
  • app启动流程
  • 程序员的民宿情结
  • PD 重要监控指标详解
  • 数字集成电路(中)
  • 为什么Spring中的bean默认都是单例模式?
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • Angular Elements 及其运作原理
  • Angular2开发踩坑系列-生产环境编译
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CSS中外联样式表代表的含义
  • Fundebug计费标准解释:事件数是如何定义的?
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • MobX
  • nginx 配置多 域名 + 多 https
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • vue:响应原理
  • 机器学习 vs. 深度学习
  • 聊聊directory traversal attack
  • 如何在GitHub上创建个人博客
  • 深度解析利用ES6进行Promise封装总结
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #pragma multi_compile #pragma shader_feature
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #预处理和函数的对比以及条件编译
  • (1)Android开发优化---------UI优化
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (C)一些题4
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (Python第六天)文件处理
  • (编译到47%失败)to be deleted
  • (四)库存超卖案例实战——优化redis分布式锁
  • (五)Python 垃圾回收机制
  • (一)Neo4j下载安装以及初次使用
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)nsfocus-绿盟科技笔试题目
  • (转)socket Aio demo
  • .java 9 找不到符号_java找不到符号
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net 反编译_.net反编译的相关问题
  • .NET连接数据库方式