首先,我要声明这是大学的工作,所以我并没有要求别人为我编写代码,我只需要指出正确的方向即可。:)

好的,因此我需要编写一种算法来解决任意大小的(可解决的)数独板。我编写了一个递归函数,可以快速(〜1ms)求解任何9x9电路板,但是当我做较大的电路板(16x16)时,它很难解决。.我已经进行了20分钟的测试,它可以似乎无法解决。它可以解决简单的16x16难题,甚至可以解决空白的16x16电路板,所以我认为问题不在于尺寸。它更可能是我认为的算法。

无论如何,这是我程序的基本逻辑。

我有一个3D向量,可以存储每个正方形的可能值

当将值放置在正方形中时,会将其从周围的正方形,行和列的可能值中删除

那么我的求解功能基本上是:

bool solve() {

if (there are no unfilled squares)

return true

if (the board is unsolvable - there are empty squares that have no possible values)

return false

while (there are empty squares)

{

int squaresFilled = fillSquaresWithOnlyOneChoice(); //this method updates the possible results vector whenever it fills a square

if (squaresFilled == 0)

break;

}

//exhausted all of the 'easy' squares (squares with only one possible choice), need to make a guess

while (there are empty squares that have choices left) {

find the square with the least number of choices

if (the square with the least number of choices has 0 choices)

return false; //not solvable.

remove that choice from the 3D vector (vector that has the choices for each square)

make a copy of the board and the 3D choices vector

fill the square with the choice

if (solve())

return true; //we're done

restore the board and choices vector

//the guess didn't work so keep looping and make a new guess with the restored board and choices -- the choice we just made has been removed though so it won't get made again.

}

return false; //can't go any further

}

这有什么效率低下吗?有什么办法可以使它更好地工作吗?我猜想一个16x16的电路板要花这么长时间是因为它的决策树对于一个没有足够填充的电路板来说太大了。不过这很奇怪,因为9x9电路板可以解决得很快。

任何想法或建议都绝对很棒。如果有任何我想念的信息,也请告诉我!

c语言回溯算法数独,数独回溯算法相关推荐

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

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

  2. 数独算法-递归与回溯

    1.概述 数独(Sudoku)是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个粗线宫内的数字均含1-9,不重复. 1)终盘 ...

  3. python数独伪代码回溯法_数独 #回溯算法 #CTF

    1. intro:巅峰极客的一道逆向 刷巅峰极客2020里的rev题fu!kpy,复杂得不行但是看到if d[1][0] != '8' or d[1][7] != '2'和if check(h1) ! ...

  4. 【算法进阶】回溯(backtracking)基本逻辑,以及常见回溯问题(全排列、解数独、八皇后)

    文章目录 一.引言 二.回溯法基本逻辑 三.回溯法代码模板 三.回溯法常见问题 3.1 组合 逻辑 代码 3.2 子集 逻辑 代码 3.3 子集Ⅱ 逻辑 代码 3.4 分割回文串 逻辑 代码 3.5 ...

  5. 基于C语言的9*9数独生成器(回溯法)

    基于C语言的9*9数独生成器 题目要求如下图所示: 我们采用的思路是首先生成一个完整的9*9数独,然后再随机挖空,这样就形成了一个数独局面. 代码如下: #include <stdio.h> ...

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

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

  7. 【数据结构与算法】【算法思想】回溯算法

    贪心算法 回溯算法 分治算法 动态规划 回溯算法思想应用广泛,除了用来指导深度优先搜索这种经典算法设计之外,还可以用在如正则表达式匹配,编译原理中的语法分析等. 除此之外,很多经典的数学问题都可以用回 ...

  8. 数独的生成算法和解题算法

    github项目地址:https://github.com/Xcodingman/sudo.git 配置环境:windows10 vs2013 打开工程文件,运行相对应的cpp文件即可 1.数独解题与 ...

  9. 算法训练Day24 | 回溯算法理论基础;LeetCode77.组合(经典的回溯问题)

    目录 回溯算法理论基础 1. 什么是回溯法 2. 回溯法的效率 3. 回溯法解决的问题 4. 如何理解回溯法 5. 回溯法模板-- 回溯三部曲 6. 总结 LeetCode77.组合 1. 思路 2. ...

  10. 算法笔记之回溯法(一)——溯洄从之,道阻且长;溯游从之,宛在水中央。

    回溯法理论基础 回溯法是一种搜索算法,从本质上来说,回溯法是一种穷举法,穷尽其所有可能而举其可行解:尽管回溯法有剪枝等操作,但也只是去除一些明显不可行的部分,仍改变不了回溯法暴力搜索的本质. 虽然回溯 ...

最新文章

  1. 资源盗链困扰站长 安全狗内置盗链保护功能
  2. 三层架构和MVC一样吗?(区别)
  3. 软考之运筹学计算-车床问题
  4. Unknown opcode
  5. 基于线性回归的波士顿房价预测
  6. android tablerow 间隔,android-如何使TableRow从右到左
  7. linux shell 编程
  8. 分子进化和系统发育的基础知识
  9. python面试题之Python 的特点和优点是什么
  10. 华为惨遭围剿;京东人工智能养猪;三星承认中国市场失败 | 极客头条
  11. mysql选择前12周_第十二周作业
  12. 04.如何升级扩展以支持Visual Studio 2019
  13. 关于Postman导入json文件报:failed to import data format not recognized异常的处理
  14. HTML5与flash播放器
  15. 【面包板电子制作130例仿真】简单变调电子门铃
  16. 什么样的公司需要IT外包?
  17. 信息安全——ELGamal数字签名方案的实现
  18. python红楼梦人物词频统计_用Python绘制红楼梦词云图,竟然发现了这个!
  19. [帮助理解PO文件]KDE中国/I18N/L10N
  20. linux能装sql2000,亲测linux安装sql server (docker+centos7)

热门文章

  1. 联想i5无线网无法连接服务器,联想笔记本无线网络连接不上是什么原因
  2. 【正点原子STM32连载】第七章 认识HAL库 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
  3. 机器学习(Machine Learning)与深度学习(Deep Learning)资料汇总
  4. (2)海思烧写工具Hitool工具使用
  5. 异常处理·psftp·local unable to open
  6. html+车牌号选择,html中车牌号省份简称输入键盘的示例代码
  7. 环网柜超高频局放监测及温升在线监测系统方案
  8. tcp keeplive
  9. xmind8完整版下载(超详解 图文预警)
  10. 酒店预订微信小程序怎么开发?