数独游戏的难度等级分析及求解算法研究1——关于数独

摘要:
简单性表明数独游戏的规则非常简单。你只需要知道1-9个数字,使用主题提供的数字作为线索,使用逻辑推理方法,并增加必要的耐心即可开始数独游戏。数独有各种各样的主题,并且没有解决问题的固定模型。为了解决数独问题,需要交互式地使用一种或多种方法,并且过程非常灵活。

这是自己本科所写的毕业论文,今天整理电脑的时候,无意中找到这篇文章,当初集中精力2个月才完成这篇论文, 再次读来,觉得写得过于肤浅,但毕竟是自己的心血,与其散落在学校的档案库和自己的硬盘中,倒不如拿来与园友分享。为避免篇幅过长,文章分为3个章节发布。

 

本论文首先介绍数独的历史、特点、游戏规则以及数独终盘组合数的基本情况;然后,探讨数独游戏的难度等级的划分模型,通过统计数独书籍所定义的难度等级与空格个数,运用图表分析,推断数独游戏难度等级与空格数成正比关系的结论,提出空格自由度的概念来划分数独难度系数,建立计算空格自由度的模型。以空格自由度和空格个数为衡量数独游戏难度等级的标准,建立划分数独难度等级的数学模型,并编写程序快速实现数独难度等级划分的过程;最后,研究程序语言求解数独的算法,分别使用递归法与回溯法的方式求解数独,并分析这两种算法各自的优势与不足

 

1关于数独

 

1.1  数独的发展史

 

数独(Sudoku)是一种数学智力拼图游戏。数独源于一种特殊的拉丁方阵。拉丁方阵的发明者是 18 世纪末的瑞士数学家欧拉,拉丁方阵是一种含有n种符号的方阵,其中每列或每行的n种符号都不可重复出现[1]20世纪70年代由美国一本字谜游戏杂志《Number Place》首先发表了数独的雏形,此时的数独开始发展为在9×9的格子中填入1-9的数字。2004年数独第一次在英国《泰晤士报》正式亮相,引起了一场“数独”热,短短数月间,便蔓延至全球[2],时至今日,数独在日本最为盛行,并得到发扬光大。

 

1.2  数独的游戏规则

 

数独发展至今,玩法和形式更加多元化。传统的数独是将一个大正方形划成3×3的九个九宫格,每个九宫格由33列共9个小方格构成,这样整个大正方形形成一个9×9的方格群。数独的规则是数独的编写者事先在一些方格里填上些数字作为提示,利用事先提供的数字作为线索,在大正方形内填满1-9的数字,要求大正方形每一行、每一列及每个九宫格内均必须包括19的每一个数字,既不能遗漏也不能重复[3]

 

1.3  数独的特点

 

数独游戏的特点十分鲜明,它将简单性、灵活性、趣味性融合为一体。

简单性表现为数独游戏规则十分简单,只需要认识1-9个数字,利用题目所提供的数字为线索,运用逻辑推理的方法,加上必要的耐心,便可开始数独的游戏。

在实际操作过程中,数独的求解方法众多,唯一法、相斥法、排除法等等[4]。数独的题目多种多样,解题没有固定的模式,求解一道数独需要一种或多种方法交互使用,过程相当灵活。

玩家在求解数独的过程,体验着思维跳跃的快乐,解题时往往苦思冥想,在思考后得到答案,又有一种豁然开朗的快乐,思考数独的过程给人一种“山穷水复疑无路,柳暗花明又一村”的感觉。解题过程中开动脑筋,活跃思维,十分有趣。

 

1.4  数独组合

 

数字排列组合的方式千变万化,简单的81个格子所组合的数独终盘数量惊人。2005Bertram. FelgenhauerFrazer. Jarvis发表《Enumerating possible Sudoku grids》,用暴力破解法算出数独存在数独游戏的难度等级分析及求解算法研究1——关于数独第1张种排列的组合。排除数字交换和对称等重复的因素,数独终盘有数独游戏的难度等级分析及求解算法研究1——关于数独第2张种排列组合[5]81个格子可组合出数量如此庞大的数独终盘,那每个数独终盘又能够创造多少数独题目呢?根据统计学上的排列组合[6],每个数独盘中,挖掉的空格数有9×9=81种可能,当所挖的空格个数为n个,对应的挖空方式有数独游戏的难度等级分析及求解算法研究1——关于数独第3张种。因此,每个数独终盘的挖空方式有数独游戏的难度等级分析及求解算法研究1——关于数独第4张种,即可以创造数独游戏的难度等级分析及求解算法研究1——关于数独第4张种题目。所有数独终盘能够制造  数独游戏的难度等级分析及求解算法研究1——关于数独第6张种数独题目。

注:发现在博客园写数学公式真是麻烦啊,我是先存储成图片格式再上传,这样做是不是太笨了,大家有没有简单的方法介绍一下呢?

 

 

免责声明:文章转载自《数独游戏的难度等级分析及求解算法研究1——关于数独》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇APP 安全测试点概述win10相机注册表变化监控下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

36. 有效的数独

判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。 上图是一个部分填充的有效的数独。 数独部分空格内已填入了数字,空白格用'.'表示。 示例1: 输入:[["5","3",".",".","7","....

leetcode 36 有效的数独 哈希表 unordered_set unordersd_map 保存状态 leetcode 37 解数独

leetcode 36 感觉就是遍历。 保存好状态,就是各行各列还有各分区divide的情况 用数组做。 空间小时间大 class Solution { public: bool isValidSudoku(vector<vector<char>>& board) { int row[9][9]={...

LeetCode 36——有效的数独

1. 题目 2. 解答 将数独中数字的 ASCII 码值转化到 0-8 之间作为散列值,建立一个散列表,然后分别逐行、逐列、逐宫(3*3小块)统计每个数字的出现次数,若出现次数大于 1,则数独无效。 class Solution { public: bool isValidSudoku(vector<vector<char>&g...