一个很傻瓜式解数独算法
假设你的棋盘是一个二维数组: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晚上diy的matlab解数独算法,很好理解!
花了1晚上diy的matlab解数独算法,很好理解! 前言 一.数独的规则 二.算法 1.思路 2.流程图 3.Matlab代码 总结 前言 老婆最近迷上了数独,还给我拍了张照片,初步了解了规则之后, ...
- c语言解数独算法递归,How to think:递归和数独试探算法
上次说的计算算法可以根据游戏规则把100%确凿的数字填入空格,对于可以填入不止一个数字的数独空格,有一个简单的办法来解决:试探!我可以依次填入可填的数字,并计算或者试探剩下的空格,重复下去直到全部填满 ...
- 最短路径 自己写的一个很简单的模板 dijkstra算法
根据图论课本上的一个图自己写的一个最短路径的dijkstra算法 #include<stdio.h> const int m=999999999; int main() {int tu[8 ...
- python数独代码_Python 解数独(Sudoku)
闲来有了用python解数独的想法,但由于对复杂些的算法仍是一窍不通,最终算是用简单算法实现了出来. 相关简介: 1.使用的算法很常规,很好理解,有点类似深度优先搜索算法. 2.解常规难度的数独耗时约 ...
- 光学算法——经典枝切法(解包裹算法)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 注:本文所讲内容为本人硕士毕业论文:<基于干涉图像质量分析的激光干涉仪抗振技术研究> ...
- 微信小程序拍照解数独
之前刷数独玩,出于偷懒的思想,总想着用计算机去解决.算法没少些,之前通过手工录入的9x9数据解数独,深度优先遍历算法,很容易.但总想更加方便一点,比如拍照直接解析一个数独的表格,自动解出来. 正好前几 ...
- 回溯法简单应用--解数独
简单介绍 数独是当下较为流行的数学游戏之一.通常数独由9x9的格子构成,其中将9x9的格子分为9个3x3的区域,称为"宫"(通常宫与宫之间会用较粗的线来分隔).游戏的目标则是在格子 ...
- java新建一个女朋友_详解java创建一个女朋友类(对象啥的new一个就是)==建造者项目,傻瓜式一键重写...
创建一个女朋友,她有很多的属性,比如:性别,年龄,身高,体重,类型等等,虽然每个女朋友都有这些属性,但是每个人找女朋友的要求都是不一样的,有的人喜欢男的,有的人喜欢女的,有的喜欢胖的,不同的人可以根据 ...
- 图论解油瓶分油问题_一个很有趣的de novo图论算法
首先,小编先给大家介绍一些关于组装的历史.大家肯定也知道,这个组装技术的发展是依赖于测序技术的.首先在一代测序的时候,测序数据量较少,成本较高,人们对于组装的结首先,小编先给大家介绍一些关于组装的历史 ...
最新文章
- B端产品思维全解析,提升产品经理核心竞争力
- Maven学习小结(七 生命周期[转])
- php中$tpl= add_member_info ;什么意思,DEDECMS会员信息在个人模板info和index的调用问题...
- dkplayer 延迟_阿里云播放器SDK使用说明
- 2017高教杯数学建模B 题分析
- 什么样的团队才是理想中的团队? (转自AtTeam官微的博客)
- Box plot (箱线图) 解读以及Python实现
- CentOS的虚拟机网卡eth0变成eth1
- id-mapping 理解和实现
- 读书笔记:《一分钟超强笔记本》
- 为什么顶级程序员都有超强逆商?顶级程序员马化腾在艰难的时候,是如何度过的?
- 【Linux系统管理】10 Shell 基础概念篇
- Excel如何统计指定背景颜色数据个数
- 最新,最严谨的手机号校验
- html 圆圈透明 其他不透明,Javascript HTML5 Canvas绘制透明圆圈
- 静态库与动态库的区别(转)
- java 将Object类型转换为long
- mkcert制作信任的本地 SSL 证书
- CF1225D Power Products (数论)
- 错误收集:备忘MPI Application rank 0 exited before MPI_Finalize()nbsp