假设你的棋盘是一个二维数组: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. 【排序】冒泡排序算法
  2. spark源码解析之基本概念
  3. html flash 动画效果代码大全,flash动作代码大全
  4. LeetCode 22. 括号生成(回溯/DP)
  5. linux my.cnf基本参数,Linux中MySQL配置文件my.cnf参数说明
  6. jmap命令的实现原理解析
  7. arm平台下linux c语言编程,简单分析针对ARM平台的C语言程序的编译问题
  8. 2019智能手表推荐_戴过 100 块智能手表后,2019年我觉得这4款智能手表最值得买!...
  9. jmeter-如何进行参数化-循环读取参数
  10. MySQL数据库基础教程(视频)
  11. 【NOIP2017提高A组集训10.25】凤凰院凶真(dp)
  12. c语言 教学目标,c语言选择结构程序设计教学目标
  13. 基于BERT做中文文本分类(情感分析)
  14. 数值计算方法复习之曲线拟合的最小二乘法
  15. stm32F103C8T6控制DHT11
  16. OWC生成统计报表(柱形图)
  17. 人人都是设计师:主流七种平面版式
  18. MMO手游地图同步方案的分析与总结
  19. 数学题目怎么保存到mysql中_数学题目如何存取到数据库当中?
  20. 网易云6亿用户音乐推荐算法

热门文章

  1. USACO:2.2.1 Preface Numbering 序言页码
  2. 以太坊就是公链之王,不接受反驳
  3. linux express 安装,linux下的node+express安装教程
  4. 青龙面板篇——美团(细致教程 有手就行~)
  5. 使用OneDNS完美解决办公网络优化问题
  6. Android 在图片的指定位置添加标记
  7. 讲座 | lidar目标检测------图森未来CTO王乃岩
  8. 粗略的了解Javascript
  9. ReactOS:基于Windows的开源操作系统
  10. 金字塔原理4个基本原则_青松财经发现,股市中存在4个基本原理,学会了少吃亏!...