数独,是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。

数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称“九宫格”。
利用算法解数独,主要采用了回溯法。思路如下:

1 .遍历已生成的数独二维数组,得出空白格子的数目。

2 .从第一个空白格子开始,利用数独的规范,对比同一列,同一行,以及同一个九宫格的数字,找出其所有可行解,存入数组(利用整形变量的位运算,会有更高的效率)。利用最后一个可行解,进行下一步运算。

3 .对剩下的格子进行同样的操作。

4 .如遇到无解的情况,则进行回溯操作。继续重复上述运算。

5 .当所有空白格子填满,所得结果,即为数独的解。

C++代码:
#include
#include
using namespace std;
int map[9][9];
bool isPlace(int count){
int row = count / 9;
int col = count % 9;
int j;
//同一行
for(j = 0; j < 9; ++j){
if(map[row][j] == map[row][col] && j != col){
return false;
}
}
//同一列
for(j = 0; j < 9; ++j){
if(map[j][col] == map[row][col] && j != row){
return false;
}
}
//同一小格
int tempRow = row / 3 * 3;
int tempCol = col / 3 * 3;
for(j = tempRow; j < tempRow + 3;++j){
for(int k = tempCol; k < tempCol + 3; ++k){
if(map[j][k] == map[row][col] && j != row && k != col){
return false;
}
}
}
return true;
}
void backtrace(int count){
if(count == 81){
cout<<“结果:”<<endl;
for(int i = 0; i < 9; ++i){
for(int j = 0; j < 9; ++j){
cout<<map[i][j]<<" ";
}
cout<<endl;
}
return;
}
int row = count / 9;
int col = count % 9;
if(map[row][col] == 0){
for(int i = 1; i <= 9; ++i){
map[row][col] = i;//赋值
if(isPlace(count)){//可以放
backtrace(count+1);//进入下一层
}
}
map[row][col] = 0;//回溯
}else{
backtrace(count+1);
}
}
int main()
{
for(int i = 0; i < 9; ++i){
for(int j = 0; j < 9; ++j){
cin>>map[i][j];
}
}
backtrace(0);
return 0;
}

数据结构-九宫格(回溯法)相关推荐

  1. 【算法分析】实验 4. 回溯法求解0-1背包等问题

    目录 实验内容 实验目的 实验结果 步骤1:描述与分析 步骤2:策略以及数据结构 步骤3 步骤4 步骤5 步骤6 实验总结 实验内容 本实验要求基于算法设计与分析的一般过程(即待求解问题的描述.算法设 ...

  2. java背包算法回溯法_【算法分析】实验 4. 回溯法求解0-1背包等问题

    [TOC] 实验内容 本实验要求基于算法设计与分析的一般过程(即待求解问题的描述.算法设计.算法描述.算法正确性证明.算法分析.算法实现与测试),通过回溯法的在实际问题求解实践中,加深理解其基本原理和 ...

  3. 数独解、多解(数据结构、栈、回溯法)

    首先因为个人原因前段时间在解一个数独,因为很难解不出来,再加上我王哥的启发,就想的写个程序来解决这类问题,于是就有了这篇文章...还有最近在学数据结构,里面很多东西用的都是比较繁琐的解决办法,比如链式 ...

  4. 数据结构与算法(Python)– 回溯法(Backtracking algorithm)

    数据结构与算法(Python)– 回溯法(Backtracking algorithm) 1.回溯法 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条 ...

  5. 回溯法 -数据结构与算法

    1.回溯法算法思想: 定义: 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标.但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术 ...

  6. 【算法分析】回溯法解数独(九宫格)算法

    这篇文章,是来详细介绍怎样写出一个算法,来解出所有的数独问题.算法的程序运行时间,缩减在了毫秒级别.等到这篇文章结束,我会抽时间写一篇文章,介绍如何生成一个随机的唯一解的数独问题.另外,为了做图形方便 ...

  7. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

  8. C语言回溯法九宫格数独问题

    Problem H 数独游戏 时限:1000ms 内存限制:10000K 总时限:3000ms 描述: 数独游戏规则 在9阶方阵中,包含了81个小格(九列九行),其中又再分成九个小正方形(称为宫),每 ...

  9. 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 回溯法

    <数据结构.算法与应用 -- C++语言描述>学习笔记 - 回溯法 一.算法思想 二.货箱装载 1.问题描述 2.回溯算法 3.实现 4.测试代码 一.算法思想 回溯法是搜索问题解的一种系 ...

  10. 数据结构—回溯法、子集树、排列树

    文章目录 回溯法 问题的解空间 递归回溯 迭代回溯 子集树与排列树简单介绍 轮船装载问题 0-1背包问题 八皇后问题 整数求和(1) 整数求和(2) 全排列 回溯法 回溯法是一种以深度优先方式系统搜索 ...

最新文章

  1. Python之深入解析优秀的时间格式转换工具Delorean
  2. 自己实现多线程的socket,socketserver源码剖析
  3. LDAP之三:利用开源框架LDAPTemplate和JLDAP访问LDAP
  4. Java——递归调用
  5. python第9周小测验答案_智慧树_Python程序设计基础_章节测验答案
  6. 使用sqlite3创建数据库表的时候须要注意
  7. 解析/etc/inittab 文件(转)
  8. 实现标题条的显示与隐藏
  9. 布局new操作符引发的有关析构函数的探索与总结
  10. (转)MyBatis框架的学习(六)——MyBatis整合Spring
  11. Python丨Python 性能分析大全
  12. python中scipy库的导入与函数调用方法_python的scipy库安装成功,导入scipy或其函数时却报错的问题...
  13. layui实际项目使用过程中遇到的兼容性问题
  14. [数字媒体] PR视频剪辑之竖屏实现横屏旋转切换和大视频文件缩小
  15. ubuntu22.04安装网易云音乐不能打开的问题
  16. 【历史上的今天】4 月 13 日:Damn Small Linux 首次发布;谷歌关闭短网址服务;数学先驱出生
  17. 绘制正态分布概率密度函数
  18. windows11配置检测工具-win11配置检测工具
  19. 我的世界服务器信号下面是红,适用于服务器的红石抽奖机我的世界抽奖机电路图...
  20. FW: 图说 WebAssembly

热门文章

  1. 《少有人走的路-心智成熟的旅程》读书分享
  2. 计算机专业知识3,计算机专业知识试卷3
  3. 如何获取支付宝应用APPID
  4. 经传主力控盘指标公式 清晰的主力控盘程度详解 通达信选股指标
  5. android 太阳系布局,Solar Walk太阳系模型软件-三维太阳系模型下载2.4.49安卓版-西西软件下载...
  6. 时序分析模型——MMMC
  7. 盲修瞎练路漫漫,名师点化三日成[转]
  8. 无线打印机与手机连接到服务器,图文详解手机通过无线Wifi连接打印机的方法...
  9. 《如何阅读一本书》章节要点整理
  10. 自己画的STM32老是烧掉原因分析