题目描述

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

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

数字 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);}
};

解数独 视频讲解 c++相关推荐

  1. Java关键字详解-配视频讲解链接(附带一些面试题)

    Java中常用的关键字详解-配视频讲解链接(附带一些面试题) 关键字:被Java赋予了特定含义的英文单词.关于关键字的学习贯穿了整个Java的学习,结合应用理解记忆关键字,不能单纯的死记硬背,在这里通 ...

  2. 代码随想录算法训练营第三十天| 第七章 回溯算法:332.重新安排行程,51.N皇后,37.解数独(python)

    回溯算法总结 332.重新安排行程 讲解链接 class Solution:def __init__(self):self.res = []self.dict = defaultdict(list)d ...

  3. 最新ChatGPT GPT-4 相似匹配Embedding技术详解(附ipynb与python源码及视频讲解)——开源DataWhale发布入门ChatGPT技术新手从0到1必备使用指南手册(一)

    目录 前言 最新ChatGPT GPT-4 相似匹配Embedding技术详解 1. 何为Embedding 2. 相关API 2.1 LMAS Embedding API 2.2 ChatGPT S ...

  4. idea mysql删除_IntelliJ IDEA 配置Mysql5.7 带图文详解 视频讲解

    我们在做java开发时,数据库是不可避免的,而数据库的管理我们通常会借助数据库可视化工具,比如下面这几个,你或多或少的肯定都用过,其实我们开发java的IntelliJ IDEA也有给我们提供数据库的 ...

  5. 代码随想录【Day 30】| 332.重新安排行程 、51. N皇后 、37. 解数独

    代码随想录[Day 30] | 332.重新安排行程 .51. N皇后 .37. 解数独 332.重新安排行程 题目链接:332.重新安排行程 卡尔文解 解题思路及注意事项: 代码实现: 51. N皇 ...

  6. 数独游戏前端学习笔记及后续解数独方法

    学习于默课网学习视频的整理笔记 视频老师分享代码库 基于我本地已经安装了nmp/node所以只添加了yarn 安装yarn: npm install -g yarn 安装成功后,查看版本号yarn - ...

  7. 计算机网络与通信pdf谢希仁_考研刷题资料谢希仁《计算机网络》(第7版)配套题库【考研真题精选(部分视频讲解)+章节题库】...

    谢希仁<计算机网络>(第7版)配套题库[考研真题精选(部分视频讲解)+章节题库] 本书是谢希仁<计算机网络>(第7版)教材的配套题库,主要包括以下内容: 第一部分为考研真题精选 ...

  8. 减法公式运算法则_人教版数学七年级上册1.3.2有理数的减法视频讲解+知识点+同步练习...

    觉得还不错要拉到文末点[在看]哦! 每一次[分享],每一条[留言],都是您对我的鼓励![星标]冰城云课堂,就不会再走丢啦! 电子教材 视频讲解知识点 第一章有理数 知识要点本章的主要内容可以概括为有理 ...

  9. pq分解法中b’怎么求_14.初中数学:二元一次方程组,加减消元法怎么解?视频有详细解题步骤...

    欢迎您来到方老师数学课堂,请点击上方蓝色字体,关注方老师数学课堂.所有的视频内容,全部免费,请大家放心关注,放心订阅. 初中数学:二元一次方程组,加减消元法怎么解?视频有详细解题步骤.大家先在草稿本上 ...

最新文章

  1. C# 获得系统AppData路径
  2. Linux软件安装的补充
  3. Linux指定网卡工作模式
  4. maven仓库执行脚本(clearLastUpdated.bat)
  5. SpringBoot 配置环境属性
  6. 推荐系列:2008年第10期 总12期
  7. CS224n自然语言处理(二)——语言模型、机器翻译和CNN
  8. LINUX下载编译libsrtp-2.3.0
  9. 记一次 CentOS7部署 可道云(kodexplorer)私有网盘
  10. 简单的python爬虫爬豆瓣图书TOP250
  11. 一分钟了解”matlab对数函数log“
  12. 序列化(serialization)。
  13. JS 复习(6)JavaScript对象
  14. 会议怎样召开_是否可以仅使用免费软件来召开会议?
  15. D2D 学习笔记第一课 初始化D2D 画一个矩形
  16. python中复制上一行快捷键_Pycharm最常用的快捷键及使用技巧
  17. python布尔类型(bool)
  18. 【Scala-spark.mlib】分布式矩阵——分布式计算的基石与利器
  19. 最新!OMNI3D:3D目标检测的大型基准和模型(Meta AI)
  20. 人过青年,我们的黄金时代过去了吗?

热门文章

  1. Java开发进大厂面试必备技能,技术总监都拍手叫好
  2. 计算机软件水平考试评副高,2020年计算机软考高级职称评定条件
  3. web安全-xss弹弹弹
  4. 123456 递归逆序输出成[6,5,4,3,2,1]数组
  5. 本文章提供中国国界、国界十段线原始数据以及加载方法
  6. 软件产品登记证书是什么???
  7. 打字文章计算机方面,电脑打字
  8. oracle增量备份level0,ORACLE RMAN增量备份经典理解
  9. RK3368 8.1 HDMI声音调节只有最大和最小两个等级
  10. 【ASM】Oracle ASM + 11gR2 + RHEL6.5 安装