一个很傻瓜式解数独算法
假设你的棋盘是一个二维数组: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图论算法
首先,小编先给大家介绍一些关于组装的历史.大家肯定也知道,这个组装技术的发展是依赖于测序技术的.首先在一代测序的时候,测序数据量较少,成本较高,人们对于组装的结首先,小编先给大家介绍一些关于组装的历史 ...
最新文章
- 【排序】冒泡排序算法
- spark源码解析之基本概念
- html flash 动画效果代码大全,flash动作代码大全
- LeetCode 22. 括号生成(回溯/DP)
- linux my.cnf基本参数,Linux中MySQL配置文件my.cnf参数说明
- jmap命令的实现原理解析
- arm平台下linux c语言编程,简单分析针对ARM平台的C语言程序的编译问题
- 2019智能手表推荐_戴过 100 块智能手表后,2019年我觉得这4款智能手表最值得买!...
- jmeter-如何进行参数化-循环读取参数
- MySQL数据库基础教程(视频)
- 【NOIP2017提高A组集训10.25】凤凰院凶真(dp)
- c语言 教学目标,c语言选择结构程序设计教学目标
- 基于BERT做中文文本分类(情感分析)
- 数值计算方法复习之曲线拟合的最小二乘法
- stm32F103C8T6控制DHT11
- OWC生成统计报表(柱形图)
- 人人都是设计师:主流七种平面版式
- MMO手游地图同步方案的分析与总结
- 数学题目怎么保存到mysql中_数学题目如何存取到数据库当中?
- 网易云6亿用户音乐推荐算法
热门文章
- USACO:2.2.1 Preface Numbering 序言页码
- 以太坊就是公链之王,不接受反驳
- linux express 安装,linux下的node+express安装教程
- 青龙面板篇——美团(细致教程 有手就行~)
- 使用OneDNS完美解决办公网络优化问题
- Android 在图片的指定位置添加标记
- 讲座 | lidar目标检测------图森未来CTO王乃岩
- 粗略的了解Javascript
- ReactOS:基于Windows的开源操作系统
- 金字塔原理4个基本原则_青松财经发现,股市中存在4个基本原理,学会了少吃亏!...