假设你的棋盘是一个二维数组:cells,类型int[9, 9]

        static Tuple<bool, string> Solve(){steps = 0;while (!IsSuccessfull()){var bl = TrySolveInAStep();if (!bl){return new Tuple<bool, string>(false, "无解,共花了" + steps + "步");}}return new Tuple<bool, string>(true, null);}static bool TrySolveInAStep(){steps++;for (var j = 0; j < 9; j++){for (var i = 0; i < 9; i++){if (cells[i, j] != 0)continue;var res = SolveSingleCell(i, j);if (res.Item1){cells[i, j] = res.Item2;return true;}}}return false;}static Tuple<bool, int> SolveSingleCell(int x, int y){var hasFoundAFitNum = false;var lastFitNum = 0;for (var i = 1; i <= 9; i++){var bl = IsANumFitInACell(x, y, i);if (hasFoundAFitNum){if (bl){return new Tuple<bool, int>(false, 0);}}else{if (bl){hasFoundAFitNum = true;lastFitNum = i;}}}return new Tuple<bool, int>(hasFoundAFitNum, lastFitNum);}static bool IsANumFitInACell(int x, int y, int num){for (var j = 0; j < 9; j++){if (j == y){continue;}if (cells[x, j] == 0){continue;}if (cells[x, j] == num){return false;}}for (var i = 0; i < 9; i++){if (i == x){continue;}if (cells[i, y] == 0){continue;}if (cells[i, y] == num){return false;}}var xInBigCell = x - x % 3;var yInBigCell = y - y % 3;for (var j = 0; j < 3; j++){for (var i = 0; i < 3; i++){var _x = xInBigCell + i;var _y = yInBigCell + j;if (x == _x && y == _y){continue;}if (cells[_x, _y] == 0){continue;}if (cells[_x, _y] == num){return false;}}}return true;}static bool IsSuccessfull(){for (var j = 0; j < 9; j++){for (var i = 0; i < 9; i++){if (cells[i, j] == 0){return false;}}}return true;}

这个算法只能解具有唯一解的数独

一个很傻瓜式解数独算法相关推荐

  1. 花了1晚上diy的matlab解数独算法,很好理解!

    花了1晚上diy的matlab解数独算法,很好理解! 前言 一.数独的规则 二.算法 1.思路 2.流程图 3.Matlab代码 总结 前言 老婆最近迷上了数独,还给我拍了张照片,初步了解了规则之后, ...

  2. c语言解数独算法递归,How to think:递归和数独试探算法

    上次说的计算算法可以根据游戏规则把100%确凿的数字填入空格,对于可以填入不止一个数字的数独空格,有一个简单的办法来解决:试探!我可以依次填入可填的数字,并计算或者试探剩下的空格,重复下去直到全部填满 ...

  3. 最短路径 自己写的一个很简单的模板 dijkstra算法

    根据图论课本上的一个图自己写的一个最短路径的dijkstra算法 #include<stdio.h> const int m=999999999; int main() {int tu[8 ...

  4. python数独代码_Python 解数独(Sudoku)

    闲来有了用python解数独的想法,但由于对复杂些的算法仍是一窍不通,最终算是用简单算法实现了出来. 相关简介: 1.使用的算法很常规,很好理解,有点类似深度优先搜索算法. 2.解常规难度的数独耗时约 ...

  5. 光学算法——经典枝切法(解包裹算法)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 注:本文所讲内容为本人硕士毕业论文:<基于干涉图像质量分析的激光干涉仪抗振技术研究> ...

  6. 微信小程序拍照解数独

    之前刷数独玩,出于偷懒的思想,总想着用计算机去解决.算法没少些,之前通过手工录入的9x9数据解数独,深度优先遍历算法,很容易.但总想更加方便一点,比如拍照直接解析一个数独的表格,自动解出来. 正好前几 ...

  7. 回溯法简单应用--解数独

    简单介绍 数独是当下较为流行的数学游戏之一.通常数独由9x9的格子构成,其中将9x9的格子分为9个3x3的区域,称为"宫"(通常宫与宫之间会用较粗的线来分隔).游戏的目标则是在格子 ...

  8. java新建一个女朋友_详解java创建一个女朋友类(对象啥的new一个就是)==建造者项目,傻瓜式一键重写...

    创建一个女朋友,她有很多的属性,比如:性别,年龄,身高,体重,类型等等,虽然每个女朋友都有这些属性,但是每个人找女朋友的要求都是不一样的,有的人喜欢男的,有的人喜欢女的,有的喜欢胖的,不同的人可以根据 ...

  9. 图论解油瓶分油问题_一个很有趣的de novo图论算法

    首先,小编先给大家介绍一些关于组装的历史.大家肯定也知道,这个组装技术的发展是依赖于测序技术的.首先在一代测序的时候,测序数据量较少,成本较高,人们对于组装的结首先,小编先给大家介绍一些关于组装的历史 ...

最新文章

  1. B端产品思维全解析,提升产品经理核心竞争力
  2. Maven学习小结(七 生命周期[转])
  3. php中$tpl= add_member_info ;什么意思,DEDECMS会员信息在个人模板info和index的调用问题...
  4. dkplayer 延迟_阿里云播放器SDK使用说明
  5. 2017高教杯数学建模B 题分析
  6. 什么样的团队才是理想中的团队? (转自AtTeam官微的博客)
  7. Box plot (箱线图) 解读以及Python实现
  8. CentOS的虚拟机网卡eth0变成eth1
  9. id-mapping 理解和实现
  10. 读书笔记:《一分钟超强笔记本》
  11. 为什么顶级程序员都有超强逆商?顶级程序员马化腾在艰难的时候,是如何度过的?
  12. 【Linux系统管理】10 Shell 基础概念篇
  13. Excel如何统计指定背景颜色数据个数
  14. 最新,最严谨的手机号校验
  15. html 圆圈透明 其他不透明,Javascript HTML5 Canvas绘制透明圆圈
  16. 静态库与动态库的区别(转)
  17. java 将Object类型转换为long
  18. mkcert制作信任的本地 SSL 证书
  19. CF1225D Power Products (数论)
  20. 错误收集:备忘MPI Application rank 0 exited before MPI_Finalize()nbsp

热门文章

  1. 阿波罗无法通过链接外网
  2. 查看cbr vbr_如何在口径中查看CBR和CBZ漫画书
  3. cdma特有效应_cdma系统中的远近效应
  4. yolov3调用mysql_yoloV3一步步训练自己的数据
  5. PPT画图软件,强烈推荐!提升能力的利器。
  6. 线性高电压稳压器的制作
  7. php弱口令总结,web漏洞之弱口令
  8. html自动汉字转拼音,输入汉字转换成拼音首字母js代码
  9. 2021-11-08FGUI 使用
  10. 蓝墨云功能扩展之试卷导出WORD文档