本文包括以下内容:
(1)数独游戏的核心算法;
(2)数独游戏核心算法的源代码;
(3)数独游戏的部分题目样本;
(4)适老版《数独》的设计原则及软件免积分下载。

仔细读完,必有收获啦!
阅读本文你就可以自己写出数独游戏软件啦!

一、数独游戏的核心算法

1、数独的基本规则

数独游戏的规则非常简单,以9x9标准数独为例:
(1)每行、列的9个格子由1--9数字填入,不得重复;
(2)9x9格子可划分为9个3x3的不重复的块(宫),每个3x3的块(宫)的9个格子由1--9数字填入,不得重复;

2、数独软件

数独软件,包括三类:
(1)数独题目生成器;
(2)数独答题器(也有软件含有(1)的功能);
(3)数独题目解答器;

3、数独题目生成器

数独题目生成器就是按“需求”生成数独的题目。
数独题目的需求,包括但不限于:
(1)格子总数:4x4,6x6,9x9,16x16,25,25,...
(2)格子样式:标准、异形(包括所谓的杀手数独)等等;
(3)特殊要求:对角线、和值、大小等等;
(4)难度系数:一般而言是指剩余的数字数量。数量越少,难度越高。

数独题目生成器又包括两个比较大的步骤:
(1)生成包括全部数字的数独题目;
(2)按难度系数挖去部分数字,使之称为空格;
(*)最终的剩余数字与空格成为题目;

数独题目的生成算法,主要两种:
(1)Lasvegas算法,称之为“赌徒算法”;本质就是随机算法;
基本思路是:顺序或随机位置填入1-9之间的随机数,严格遵守规则;

(2)Exchange算法,称之为“交换算法”,以一个lasvegas生成的题目为基础,
经过数字、行、列、块(宫)、旋转、对称等等交换(就是矩阵交换啦),得到看起来是新的题目;
交换算法既可以用于全数字题目,也可以用于挖去空洞的最终题目。

4、挖洞算法

挖洞算法也有两种:
(1)顺序挖洞;
从左上角开始,消除数字(挖洞),但必须确保答案唯一!
(2)随机挖洞;
随机选择位置,消除数字(挖洞),但必须确保答案唯一!

5、异型题目的生成

所有异型题目的生成,都是以标准题目生成为基础的;比如:
(1)对角线数独:实现在对角线填入随机数字;
(2)杀手数独:以一个完成的题目为基础,左右上下可以一个块为基础,填入剩余数字即可;
(3)和值数独:先生成题目,再随机取部分相邻的格子,计算其和值,并用一个虚线框标记即可;
(4)大小数独:取独立的两个格子,判别其数字大、小,用箭头绘制即可;
更多异形,也不过尔尔。

6、数独题目生成器的流程图

7、数独答题器

数独答题器是读入数独的题目,并显示于界面,供玩家选择或输入数字的软件。
数独答题器的流程图:

8、数独题目解答器

数独题目解答器是玩家或作弊者,用于输入题目,并给出答案的软件。

二、数独游戏核心算法的源代码

1、拉斯维加斯算法的源代码


/// <summary>
/// 赌徒法(美其名曰:回溯法,实际上是 Lasvegas 算法)
/// 构造数独矩阵
/// </summary>
/// <returns></returns>
public static Board LasVegas_Original(int N = 9)
{int[,] array = new int[N, N];for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){array[i, j] = 0;}}// 生成一个随机的不完整数独矩阵// 1..N 个数覆盖了 NxN 的部分点for (int i = 0; i < N; i++){int temp = rnd.Next() % (N * N);array[temp / N, temp % N] = i + 1;}// 构造数独矩阵// 暴力试错法,赌徒法,回溯法int k = 0;while (true){if (k < 0){k = 0;}int row = k / N;int column = k % N;while (true){array[row, column]++;if (array[row, column] > N){// 失败!重试!array[row, column] = 0;--k;break;}else if (Is_Matched_Node(array, row, column)){++k;break;}}// 终于摸到一条大鱼!if (k == (N * N)){return new Board(array);}}
}

数独规则检验代码:


/// <summary>
/// 验证array[row,column]是否符合要求
/// (1)每行、列不能重复!
/// (2)每个块内不能重复!
/// </summary>
/// <param name="array"></param>
/// <param name="row"></param>
/// <param name="column"></param>
/// <returns></returns>
private static bool Is_Matched_Node(int[,] array, int row, int column)
{int N = array.GetLength(0);int M = (int)Math.Sqrt(N);int temp = array[row, column];// 列检测for (int i = 0; i < N; i++){if (i != row && array[i, column] == temp){return false;}}// 行检测for (int i = 0; i < N; i++){if (i != column && array[row, i] == temp){return false;}}// 块检测int p = (row / M) * M;int q = (column / M) * M;for (int i = p; i < p + M; i++){for (int j = q; j < q + M; j++){if (i != row && j != column && array[i, j] == temp){return false;}}}return true;
}

2、挖洞程序的源代码

暂略。

3、题目显示的源代码


public static string ToHtml(int[,] array)
{int N = array.GetLength(0);int M = (int)Math.Sqrt(N);StringBuilder sb = new StringBuilder();sb.AppendLine("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");sb.AppendLine("<html xmlns=\"http://www.w3.org/1999/xhtml\" >"); sb.AppendLine("<style>");sb.AppendLine("* { -webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none; }");sb.AppendLine("td { user-select:none;width:45px;height:45px;line-height:45px;font-size:35px;padding:10px;text-align:center; }");sb.AppendLine("td.v { background-color:#FFEEEE; } ");sb.AppendLine("td.s { background-color:#EEEEEE;cursor:pointer; } ");sb.AppendLine("td.s:hover { background-color:#FFFFFF;cursor:pointer; } ");sb.AppendLine("</style>");sb.AppendLine("<body>");sb.AppendLine("<center>");sb.AppendLine("<table border=1 bordercolor='#AAAAAA' style='border-collapse:collapse;border:solid 3px #333333;'>");for (int i = 0; i < N; i++){if ((i % M) == 0)sb.AppendLine("<tr style='border-top:solid 5px #333333;'>");else if (i == (N - 1))sb.AppendLine("<tr style='border-bottom:solid 5px #333333;'>");elsesb.AppendLine("<tr>");for (int j = 0; j < N; j++){string tds = (array[i, j]==0) ? "s" : "v";if ((j % M) == 0)sb.AppendLine("<td style='border-left:solid 5px #333333;' class='"+tds+"'>");else if (j == (N - 1))sb.AppendLine("<td style='border-right:solid 5px #333333;' class='" + tds + "'>");elsesb.AppendLine("<td class='" + tds + "'>");if (array[i, j] > 0)sb.AppendLine(array[i, j]+"");else sb.AppendLine("");sb.AppendLine("</td>");}sb.AppendLine("</tr>");}sb.AppendLine("</table>");sb.AppendLine("</center>");sb.AppendLine("</body>");sb.AppendLine("</html>");return sb.ToString();
}

三、数独题目样本

9x9

(适老版《数独》软件内有10000套题目,可随意选用!)

16x16:

以后补上更多样本,比如:25x25...

四、适老版《数独》的设计原则及软件下载

《数独》特别适合幼儿、老人进行智力开发与维护。这些玩家有一些特别的需求:
(1)字体要大!
(2)操作要简单!最好不要敲键盘!
(3)难度级别要多一些,逐步培养兴趣;
等等,不一而足。

北京联高软件开发有限公司秉承“用户第一,用户第二。”的原则开发了适老版《数独》。

适老版《数独》软件经过《用于保护C#|Java源程序的深度混淆技术与软件——DeepConfuser》混淆编译而成。

用于保护C#|Java源程序的深度混淆技术与软件——DeepConfuserhttps://blog.csdn.net/beijinghorn/article/details/123156464

下载链接(0积分):
0积分下载适老版《数独》https://download.csdn.net/download/beijinghorn/85224898

联高软件可制作专门的《数独》题目或训练、竞赛软件(Y=)。

————————————————————————————

POWER BY TRUFFER.CN

C#,数独游戏(Sudoku Game)的算法与源代码相关推荐

  1. 数独游戏(Sudoku Game)

    不知道数独游戏在国内是什么时候流行起来的,原来在tompda看到有人在讨论,没有引起我的兴趣.前几天在北京图书大厦居然看到了关于数独的书,随手翻了翻,发觉这个东西在空闲时可以尝试一下. No one ...

  2. JavaScript:实现Sudoku数独游戏算法(附完整源码)

    JavaScript:实现Sudoku数独游戏算法 class Sudoku {constructor (board) {this.board = board}findEmptyCell () {// ...

  3. 数独问题流程图_数独游戏的难度等级分析及求解算法研究

    2 数独难度等级 数独游戏发展至今, 在数独爱好者的积极探索下, 求解数独的算法众多, 有 矩形顶点删减法.关键数删减法等 [7] .解答一道数独问题是一种或多种方法相互 结合, 为了使玩家能循环渐进 ...

  4. 【YBT高效进阶】1基础算法/4深度优先搜索/2数独游戏

    [YBT高效进阶]1基础算法/4深度优先搜索/2数独游戏 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 数独是一种传统益智游戏,你需要 ...

  5. java 数独算法_java版数独游戏核心算法(一)

    之前学习javascript时用javascript写过一个数独游戏,最近看了一点java的内容,于是就心血来潮想搞一个java版的数独游戏. 现在将全部代码分享出来和大家学习交流,当然代码中有着各种 ...

  6. 数独游戏java版(一)--核心算法

    之前学习javascript时用javascript写过一个数独游戏,最近看了一点java的内容,于是就心血来潮想搞一个java版的数独游戏. 现在将全部代码分享出来和大家学习交流,当然代码中有着各种 ...

  7. 数独游戏(回溯算法)

    蓝桥杯校内选择赛第6题,原题如下: 你一定听说过"数独"游戏. 如下图所示,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个同色九宫内的数 ...

  8. java数独游戏_java 数独sudoku游戏

    有大佬帮帮看下这个数独游戏程序么,检测为空.有效都成功了,就是不能把赋值更新到数组里面,一直重复打印原数组 package pro1; import java.util.Scanner; public ...

  9. C语言学习 数独游戏

    摘要:花了1周多时间学习了C语言,开始练手写解数独游戏的程序. C语言学习 数独游戏 作者:乌龙哈里 时间:2015-11-22 平台:Window7 64bit,TCC 0.9.26(x86-64 ...

  10. 求解数独难题, Sudoku问题(回溯)

    Introduction : 标准的数独游戏是在一个 9 X 9 的棋盘上填写 1 – 9 这 9 个数字,规则是这样的: 棋盘分成上图所示的 9 个区域(不同颜色做背景标出,每个区域是 3 X 3 ...

最新文章

  1. 创建第一个freemarker
  2. Loadrunner日志设置与查看
  3. jmeter 循环使用csv数据_如何通过jmeter读取csv文件行数来设置循环控制器的总数...
  4. 什么是虚拟化,虚拟化的现状
  5. 数字加密c语言程序_国外程序员整理的 C++ 资源大全
  6. thinkphp Hook行为的使用案例
  7. leetcode题解136-只出现一次的数字
  8. AJAX Toolkits -- DropShadow
  9. 压测学习总结(3)——Jmeter 脚本如何生成
  10. iOS:ASIHttpRequest虽不更新,但仍值得详细了解
  11. Helm 3 完整教程(十七):Helm 流控制结构(1)if / else 语句
  12. 【DL小结3】RNN与LSTM
  13. C++:单例模式——线程安全模式、饥汉模式、懒汉模式
  14. 龙芯2F笔记本8089D
  15. windows下CMD常用命令
  16. 如何抓取图片php,PHP网络爬虫之图片抓取
  17. 锚具ovm是什么意思_OVM锚具
  18. AMD发布22.9.2驱动,支持《禁闭求生(Grounded)》
  19. Python初探(一)
  20. 笨方法学python在线_“笨办法”学Python(第3版)

热门文章

  1. java自学网站,看完不后悔,千万不要做收藏者!!!
  2. JDK16和JDK8共存与切换
  3. Ubuntu下利用Wine安装AxureRP 8
  4. 自己为 GridView 写分页 如: [首页][上一页][下一页][末页]
  5. 点云数据文件常用格式及PCL中点云数据类型
  6. mysql触发器报错_mysql触发器实例:莫名其妙的错误?
  7. dsn服务器显示问题,DNS 服务器出现4004错误解决方法
  8. 如何安装Bodymovin插件
  9. 前端设备通过Ehome协议接入EasyCVR平台无法播放问题解决
  10. 《算法》第四版官网库及数据文件