解数独 视频讲解 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);}
};
解数独 视频讲解 c++相关推荐
- Java关键字详解-配视频讲解链接(附带一些面试题)
Java中常用的关键字详解-配视频讲解链接(附带一些面试题) 关键字:被Java赋予了特定含义的英文单词.关于关键字的学习贯穿了整个Java的学习,结合应用理解记忆关键字,不能单纯的死记硬背,在这里通 ...
- 代码随想录算法训练营第三十天| 第七章 回溯算法:332.重新安排行程,51.N皇后,37.解数独(python)
回溯算法总结 332.重新安排行程 讲解链接 class Solution:def __init__(self):self.res = []self.dict = defaultdict(list)d ...
- 最新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 ...
- idea mysql删除_IntelliJ IDEA 配置Mysql5.7 带图文详解 视频讲解
我们在做java开发时,数据库是不可避免的,而数据库的管理我们通常会借助数据库可视化工具,比如下面这几个,你或多或少的肯定都用过,其实我们开发java的IntelliJ IDEA也有给我们提供数据库的 ...
- 代码随想录【Day 30】| 332.重新安排行程 、51. N皇后 、37. 解数独
代码随想录[Day 30] | 332.重新安排行程 .51. N皇后 .37. 解数独 332.重新安排行程 题目链接:332.重新安排行程 卡尔文解 解题思路及注意事项: 代码实现: 51. N皇 ...
- 数独游戏前端学习笔记及后续解数独方法
学习于默课网学习视频的整理笔记 视频老师分享代码库 基于我本地已经安装了nmp/node所以只添加了yarn 安装yarn: npm install -g yarn 安装成功后,查看版本号yarn - ...
- 计算机网络与通信pdf谢希仁_考研刷题资料谢希仁《计算机网络》(第7版)配套题库【考研真题精选(部分视频讲解)+章节题库】...
谢希仁<计算机网络>(第7版)配套题库[考研真题精选(部分视频讲解)+章节题库] 本书是谢希仁<计算机网络>(第7版)教材的配套题库,主要包括以下内容: 第一部分为考研真题精选 ...
- 减法公式运算法则_人教版数学七年级上册1.3.2有理数的减法视频讲解+知识点+同步练习...
觉得还不错要拉到文末点[在看]哦! 每一次[分享],每一条[留言],都是您对我的鼓励![星标]冰城云课堂,就不会再走丢啦! 电子教材 视频讲解知识点 第一章有理数 知识要点本章的主要内容可以概括为有理 ...
- pq分解法中b’怎么求_14.初中数学:二元一次方程组,加减消元法怎么解?视频有详细解题步骤...
欢迎您来到方老师数学课堂,请点击上方蓝色字体,关注方老师数学课堂.所有的视频内容,全部免费,请大家放心关注,放心订阅. 初中数学:二元一次方程组,加减消元法怎么解?视频有详细解题步骤.大家先在草稿本上 ...
最新文章
- C# 获得系统AppData路径
- Linux软件安装的补充
- Linux指定网卡工作模式
- maven仓库执行脚本(clearLastUpdated.bat)
- SpringBoot 配置环境属性
- 推荐系列:2008年第10期 总12期
- CS224n自然语言处理(二)——语言模型、机器翻译和CNN
- LINUX下载编译libsrtp-2.3.0
- 记一次 CentOS7部署 可道云(kodexplorer)私有网盘
- 简单的python爬虫爬豆瓣图书TOP250
- 一分钟了解”matlab对数函数log“
- 序列化(serialization)。
- JS 复习(6)JavaScript对象
- 会议怎样召开_是否可以仅使用免费软件来召开会议?
- D2D 学习笔记第一课 初始化D2D 画一个矩形
- python中复制上一行快捷键_Pycharm最常用的快捷键及使用技巧
- python布尔类型(bool)
- 【Scala-spark.mlib】分布式矩阵——分布式计算的基石与利器
- 最新!OMNI3D:3D目标检测的大型基准和模型(Meta AI)
- 人过青年,我们的黄金时代过去了吗?
热门文章
- Java开发进大厂面试必备技能,技术总监都拍手叫好
- 计算机软件水平考试评副高,2020年计算机软考高级职称评定条件
- web安全-xss弹弹弹
- 123456 递归逆序输出成[6,5,4,3,2,1]数组
- 本文章提供中国国界、国界十段线原始数据以及加载方法
- 软件产品登记证书是什么???
- 打字文章计算机方面,电脑打字
- oracle增量备份level0,ORACLE RMAN增量备份经典理解
- RK3368 8.1 HDMI声音调节只有最大和最小两个等级
- 【ASM】Oracle ASM + 11gR2 + RHEL6.5 安装