数独游戏实验报告doc

数独游戏实验报告篇一:Sudoku 数独实验报告Project2:Sudoku实验报告一、算法描述求解Sudoku让人最容易想到的方法是穷举每个方格可能的值,如果符合条件,则得到解,不符合条件则进行回溯。

通过递归的方法,显然可以得到数独的解。

我想到的简单的递归方法,是每一行从左到右,试验每一个方格可能的数字,进行递归。

这种方法看似非常麻烦,实际上对于一般的数独题,速度是非常快的,思想比较简单,写出来的代码也非常简单、易懂。

算法1:简单递归方法从第一个格开始,从1到9试验,是否满足行、列、九宫格互不相同的条件。

若满足条件,则填入该数字,再试验下一个格。

当一个格子出现没有数字能填的情况时,说明已经填的数字有误,回溯,再进行递归。

算法2:优化的递归算法先遍历所有格子,统计每种格子可能出现数字的个数。

每次挑选可能出现数字个数最少的格子来进行递归。

设置三维数组poss[i][j][k]来存储可能出现数字的信息。

poss[i][j][0]记录i行j列的格子可能出现数字的个数,poss[i][j][k](1 算法3:生成数独棋盘的算法我最开始的想法是穷举法,随机生成满足行各不相同的9行,再判断9宫格、每列是否符合要求,符合条件时,随机生成停止。

然而,这种算法的当然时间复杂度显然是过高。

第99一步的随机生成的次数是9*9/P9=9608。

随机生成一组棋盘耗时就非常大。

后来,我从求解的个数的程序获得启发。

算法二对于1000多组解的数独棋盘,解起来也很快。

随机生成填9个方格,再用算法一的方法解出来,取第一组正确的解作为棋盘即可生成填好的棋盘。

再把一定数量的格子的数字随机删除,计算解的个数。

如果解唯一,就得到了棋盘。

二、数据结构这两种算法的数据结构不是非常复杂,只是普通的数组。

算法一:数组a[i][j]算法二:数组a[i][j]和poss[i][j][k] 算法三:数组a[i][j]和poss[i][j][k] 三、时间效率分析算法1:这种算法在tsinsen系统上只用了15ms得到全部答案。

虽然这种算法在tsinsen系统的测试中有很好的表现,但是我试了试在几道骨灰级难度的题,发现这种算法可能会用到10秒以上的时间,并且测试数据不同,时间差异非常大。

我认为,这种算法的漏洞在于,如果开始的格子可能出现的数字非常多,递归树开始的枝会非常多。

并且,我们一般做数独题,都会先挑可能出现数字个数最少的格子来填,充分利用了已知条件。

然而,这种算法只按格子的行列顺序来试验,显然非常傻。

于是,我想出了第二种算法。

算法2:非常令人失望的是,虽然它能在短时间内解出骨灰级题目,但是,和上一个算法相比,对于简单的题目,它比较耗时。

在tsinsen系统中测试的时间是91ms。

它的缺陷在于,每次递归都必须更新(i,j)格子所在的行、列、九宫格所有的元素。

每次要求20个数的poss[i][j][]。

回溯同样要更新。

并且求poss[i][j][]的函数时间复杂度是O(n)。

每一步所耗时间比上一种算法多很多。

但是,总的试验的步数能显著减少。

所以,这种算法适用于数独解题的动画演示和解极难题目。

四、程序结构算法一:算法二:五、运行结果五、总结和反思后来老师提高了难度,要求程序能求出多解数独题的解的个数。

几千个解的数据都能迅速得出答案,但是几万个解的数据,需要很长时间,更别提几百万的数据。

这两种递归的算法都有问题,优化的空间也有限,需要更强大、高效的算法。

这次Project让我不断思考,改进了最初的算法。

编程是确实是一个克服困难、不断改进与超越的过程。

总有新的数据摆在面前,把原来的算法打击得很惨,激励着我们研究更加先进的算法。

篇二:android课程设计报告(数独游戏)?河南科技学院《物联网移动应用开发》课程设计报告设计题目:基于android的数独游戏设计班级:学号: XX156555 姓名:胡建刚指导教师:信息工程学院课程设计报告说明一、写报告前,请认真阅读《课程设计报告说明》。

二、打印装订要求1、一律用A4纸,双面打印,并左侧装订。

报告正文部分均采用宋体小四。

《课程设计报告说明》页也打印。

2、课程设计概述部分占一页;课程设计内容长度根据实际需要填写;结论和指导教师评语及成绩单独占一页。

保证打印格式工整。

3、指导教师评语及成绩部分由指导教师填写。

三、报告内容要求1、课程设计目的结合实际自己写,不要雷同。

2、课程设计原理简要说明所完成课程设计项目所涉及的理论知识。

3、课程设计内容这是课程设计报告极其重要的内容。

概括整个课程设计过程。

(最好在上述内容基础上画出相应的流图、设计思路和设计方法,再配以相应的文字进行说明。

)篇三:人工智能课程设计报告(数独游戏)人工智能课程设计报告数独游戏学号:姓名:指导老师:日期:一、游戏介绍:在9×9的格子中,用1到9共9个阿拉伯数字填满整个格子。

要求:1.每一行都用到1到9,位置不限2.每一列都用到1到9,位置不限3.每3×3的格子都用到1到9,位置不限开始时:填完后:二、程序实现的功能1、玩家可以选择游戏的难易程度2、玩家可以自己填数字3、电脑直接显示答案4、玩家如果不想玩可以开始新游戏三、使用说明运行Sudoku.exe程序,初始选择为简单模式,玩家可以自己选择,然后点击“开始游戏”,上面显示玩家用的时间,如果玩家想自己填数字,直接点要填的空格会出现一个编辑框,在里面输入要填的数字,按回车键。

想直接显示结果,点击“显示答案”。

点击“开始游戏”可以开始新一盘游戏。

四、算法设计1、算法思想:本算法采用“挖洞”思想。

经过以下两步生成数独题:1)运用拉斯维加斯随机算法生成一个终盘;2)采用以下3个操作“抹去”一部分数字来生成数独题:①根据所需要的难度等级选取一种挖洞顺序;②通过深度优先搜索来求解,从而保证“挖去”一个数字后该数独题仍有唯一解③引入剪枝技术来避免无效的“挖洞”尝试。

伪代码:start 生成一个完整的终盘;if(true)生成成功;else 进行循环,直到终盘为true,即可解;then 按照难易成都,随机去掉几个数,进行检测;if(检测成功){输出};else{重新“挖洞”},直到成功;2、问题的分析要能保证算法生成的数独题具有可变化的难度和唯一解,该算法内部应该包含有对数独题的求解和评级功能。

在此将该算法的设计工作分为生成、求解2部分工作(均在类KSudokuCaculate中):(1)先生成一个终盘,存在一个二维数组中。

(2)根据游戏者需求的难度等级,我们从已知格的总数和分布来确定“挖去”的个数。

3、生成终盘(算法如下)建立一个新类KSudokuCaculate,在类里面编写下面源代码bool KSudokuCaculate::MakeSudokuData(SUDOKUMATRIX nGameData) {bool bRet = false;//PROCESS_ERROR(NULL != nGameData); // 判断指针是否为空bRet = true;// 先随机生成中间g_nSmallSize×方格_nSmallSize方格的个数字RandomCenter();// 先后产生其他g_nSmallSize×方格_nSmallSize 方格的个数字CacMiddleUpAndDown(); CacMiddleLeftAndRight();CacCorner();// 将生成的矩阵复制输出到参数中 for (int nRow = 0; nRow {for (int nCol = 0; nCol {nGameData[nRow][nCol] = nMatrix[nRow][nCol];}}Exit0:return bRet;}/*** &brief 用于随机生成中间×方格的个数字* &return 若成功生成则返回true, 否则返回false */bool KSudokuCaculate::RandomCenter(void){// nHasAssign[i]标志数字i+1是否已经被分配int nHasAssign[g_nSize] = {0}; int nRow, nCol, nNum;srand(time(0));for (nRow = g_nSmallSize; nRow for (nCol = g_nSmallSize; nCol {nNum = rand() % g_nSize; // 随机生成-9中的一个数字 while (0 != nHasAssign[nNum]) // 选择一个没有分配的数字 nNum = rand() % g_nSiz(原文来自:小草范文网:数独游戏实验报告)e;nMatrix[nRow][nCol] = nNum + 1;nHasAssign[nNum] = 1;}return true;}//根据中间的方格数字经过列变换计算出中间上面和下面×方格内的数字 //若成功生成则返回true, 否则返回falsebool KSudokuCaculate::CacMiddleUpAndDown(void) {int nUp; // 上面方格的x坐标差int nDown;// 下面方格的x坐标差int nRow, nCol;// 交换中间第一列nCol = g_nSmallSize;nUp = 1;nDown = 2;for (nRow = g_nSmallSize; nRow {// 复制数字nMatrix[nRow - g_nSmallSize][nCol + nUp] =nMatrix[nRow][nCol];nMatrix[nRow + g_nSmallSize][nCol + nDown] = nMatrix[nRow][nCol]; } // 交换中间第二列 nCol++;nUp = 1;nDown = -1;for (nRow = g_nSmallSize; nRow // 复制数字nMatrix[nRow - g_nSmallSize][nCol + nUp] = nMatrix[nRow][nCol];nMatrix[nRow + g_nSmallSize][nCol + nDown] = nMatrix[nRow][nCol]; } // 交换中间第三列nCol++;nUp = -2;nDown = -1;for (nRow = g_nSmallSize; nRow // 复制数字nMatrix[nRow - g_nSmallSize][nCol + nUp] = nMatrix[nRow][nCol];nMatrix[nRow + g_nSmallSize][nCol + nDown] = nMatrix[nRow][nCol]; } return true;}/*** &brief 根据中间的方格数字经过列变换计算出中间左边和右边×方格内的数字* &return 若成功生成则返回true, 否则返回false*/bool KSudokuCaculate::CacMiddleLeftAndRight(void) {int nLeft; // 左边方格的y坐标差int nRight; // 右边方格的y坐标差int nRow, nCol;// 交换中间第一行。

合集下载

“数独游戏”的开发实验报告

“数独游戏”的开发实验报告

”的开发实验报告数独游戏”“数独游戏一、实验目的通过“数独游戏”Android应用程序的开发,掌握一个实际应用项目的开发流程和知识。

二、开发步骤(一)设计用户界面1、创建启动界面(1) 使用Eclipse插件创建一个Android应用程序(2) 修改res/layout/main.xml文件,使用不同的文本和几个按钮替换原标签(3) 在res/values/strings.xml中定义要用到的字符串(4)2、模式切换为使横向模式下人能正常显示,可为横向模式创建一个不同的布局。

创建名为res/layout-land/main.xml文件,该文件采用TableLayout布局方式创建两列按钮。

3、实现About对话框(1) 为About按钮活动创建一个布局文件res/layout/about.xml(2) 在About,java中定义About活动,重写onCreate()方法和并调用setContentView()方法(3) 将About对话框的标题及对话框中包含的文本内容添加到res/values/strings.xml中(4)(5)4、应用主题可以在res/values/styles.xml中定义自定义主题,但在此只需利用一个预定义主题,在Android.Manifest.xml中修改About的定义,使其具有主题特性(property)。

5、添加菜单实现在按下Mune按钮时弹出菜单(1) 在res/values/strings.xml中定义要用到的字符串(2) 在res/menu/menu.xml中定义菜单(3) 将上面定义的菜单加到Sudoku类中,并导入以下包:import android.view.Menu;import android.view.MenuInflater;import android.MenuItem;(4) 重写Sudoku类中的onCreateOptionsMenu()方法6、添加设置在Sudoku程序中添加两个设置,一个用于播放背景音乐,一个用于显示提示信息。

数独游戏的实验报告

数独游戏的实验报告

数独游戏的实验报告数独游戏的实验报告引言:数独游戏是一种经典的逻辑推理游戏,通过填充9x9的方格,使每一行、每一列和每一个3x3的小方格内都包含数字1-9,且不重复。

本实验旨在探索数独游戏对思维能力和逻辑推理能力的影响,并通过实验数据进行分析和总结。

实验设计:本实验采用了随机抽样的方法,选取了100名参与者,随机分为两组:实验组和对照组。

实验组的参与者将进行数独游戏,而对照组的参与者则进行其他智力游戏,以比较数独游戏对思维能力的影响。

实验过程:实验组的参与者在开始实验前接受了一次思维能力测试,包括逻辑推理、空间想象和问题解决等方面。

然后,他们进行了为期两周的数独游戏训练,每天至少30分钟。

在训练期结束后,他们再次接受了相同的思维能力测试。

对照组的参与者接受了与实验组相同的思维能力测试,然后进行了为期两周的其他智力游戏训练,同样每天至少30分钟。

训练期结束后,他们再次接受了相同的思维能力测试。

实验结果:通过对实验组和对照组的测试结果进行对比,我们得出了以下结论:1. 数独游戏对思维能力有积极影响。

实验组在思维能力测试中的得分相对于训练前有所提高,而对照组的得分变化不显著。

这表明数独游戏有助于提升逻辑推理和问题解决能力。

2. 数独游戏对注意力和集中力有正面影响。

实验组参与者在训练后表现出更好的注意力和集中力,而对照组的变化不明显。

数独游戏的规则和复杂性要求参与者集中精力,这可能有助于训练他们的注意力。

3. 数独游戏对空间想象能力有促进作用。

实验组在训练后的空间想象测试中表现出明显的提高,而对照组没有明显变化。

数独游戏需要参与者在九宫格内进行数字排列,这对他们的空间想象能力提出了挑战。

结论:通过本次实验,我们可以得出结论:数独游戏对思维能力、注意力和空间想象能力有积极的影响。

数独游戏不仅是一种娱乐方式,更是一种有效的思维训练工具。

在现代社会,人们面临越来越多的信息和复杂的问题,提升思维能力和逻辑推理能力变得尤为重要。

数独游戏实验报告

数独游戏实验报告

数独游戏实验报告
《数独游戏实验报告》
数独是一种经典的逻辑推理游戏,通过填写数字来完成一个9x9的格子,要求每一行、每一列和每一个3x3的小格子内都不能有重复的数字。

数独游戏在全球范围内备受欢迎,被认为是一种优秀的思维训练方式。

为了进一步了解数独游戏对人们的逻辑推理能力和解决问题能力的影响,我们进行了一项实验。

在这项实验中,我们邀请了100名志愿者参与数独游戏的实验。

这100名志愿者被分成两组,一组进行了8周的数独游戏训练,另一组则没有进行任何数独游戏训练,作为对照组。

在实验开始前和结束后,我们对所有志愿者进行了逻辑推理和问题解决能力的测试,以评估数独游戏对他们的影响。

实验结果显示,经过8周的数独游戏训练,参与训练的志愿者在逻辑推理和问题解决能力上有了显著的提升。

与对照组相比,数独训练组的参与者在解决逻辑问题和推理推断方面表现更加出色。

这表明数独游戏对人们的逻辑推理和解决问题能力有积极的影响。

通过这项实验,我们得出了结论:数独游戏不仅是一种娱乐方式,更是一种有效的思维训练方式。

数独游戏可以帮助人们提高逻辑推理和问题解决能力,对于培养人们的思维能力有着积极的作用。

因此,我们鼓励更多的人参与数独游戏,以提升他们的思维能力和解决问题的能力。

同时,我们也希望未来能进行更多的实验研究,探索数独游戏对人们的思维能力的具体影响机制,为数独游戏的教育和培训提供更加科学的依据。

数独游戏报告

数独游戏报告

数独游戏院系:班级:组长:组员:指导教师:2010 年12 月29 日数据结构课程设计任务书一、题目:数独游戏二、设计要求(1)XXX(组长)、XXX(组员)和 XXX(组员)组成设计小组。

(2)小组成员分工协作完成,要求每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。

(3)查阅相关资料,自学具体课题中涉及到的新知识。

(4)根据实现的功能,划分出合理的对象类,明确对象类间的关系。

为每个对象类设计正确的属性和方法,为每个方法设计合理的方法体。

(5)编程简练,程序功能齐全,能正确运行。

(6)课题完成后提交课程设计报告,格式规范,内容详实。

其主要内容包括:1-封皮、2-课程设计任务书,3-指导教师评语与成绩、4-目录、5-需求分析、6-概要设计、7-详细设计(含主要代码)、8-调试分析与测试结果、9-用户使用说明、10-附录或参考资料。

报告用A4纸打印,中文字体为宋体,西文字体用Time New Roma,小四号字,行距采用“固定值”18磅,首行缩进2字符。

(7)课程设计报告内容的说明:需求分析-分析课题需要实现的功能以及要用到的知识点,分析课题涉及的对象间的关系;概要设计-根据实现的功能;详细设计-具体的功能的实现以及主要程序代码;调试分析与测试结果-用多组测试用例调试分析系统的正确性、完备性等各项性能指标,写出测试结果;用户使用说明-编写该系统的使用说明书;附录或参考资料-完整的程序代码以及查阅资料的参考文献。

三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行左右,不得抄袭。

四、课程设计工作计划2010年12月21日,指导教师讲课,学生根据题目准备资料;2010年12月21日~2010年12月27日,设计小组进行总体方案设计和任务分工;每人完成自己承担的程序模块并通过独立编译;2010年12月28日~2010年12月29日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;同时撰写报告。

关于数独的调查报告

关于数独的调查报告

数独调查报告背景数独是一种逻辑推理游戏,通常由9x9的方格组成,每个方格内填入1到9的数字。

游戏规则要求每行、每列和每个3x3的小方格内都不能出现重复的数字。

数独游戏在全球范围内非常受欢迎,被认为是一种锻炼思维能力和逻辑推理能力的好方法。

目的本次调查旨在了解人们对数独游戏的喜好程度、玩法习惯以及对数独游戏难度和挑战性的看法。

通过分析调查结果,我们希望提供有关数独游戏发展和改进的建议。

方法我们采用在线问卷调查的方式收集数据。

问卷包括以下几个方面: 1. 个人信息:年龄、性别、职业等。

2. 数独经验:是否玩过数独游戏、玩了多久。

3. 数独喜好:对数独游戏喜欢程度评分、最常使用的玩法(纸质版还是电子版)。

4. 数独难度:认为数独难度如何、最喜欢的难度级别。

5. 数独挑战性:认为数独游戏具有挑战性的原因、是否愿意尝试更难的数独谜题。

我们在社交媒体上发布了问卷链接,并设定了一个月的时间来收集数据。

共收集到1000份有效问卷回复。

分析个人信息调查结果显示,参与调查者年龄跨度较大,主要集中在20岁至40岁之间。

男性和女性参与者数量相当。

职业方面,学生和白领居多。

数独经验超过90%的参与者表示曾经玩过数独游戏,其中有一部分是长期玩家。

仅有少数参与者表示没有接触过数独游戏。

数独喜好对于数独游戏的喜好程度评分,大多数参与者给出了4或5分(满分为5分)。

这表明绝大多数人对数独游戏持有积极态度。

关于玩法习惯,纸质版和电子版都有一定比例的支持者。

纸质版更受年龄较大的参与者喜欢,而电子版则更受年轻人群体欢迎。

数独难度参与者对数独游戏的难度评价分布较为均匀,大致可以分为三类:认为较易、认为适中和认为较难。

其中,认为适中的人数最多。

在最喜欢的难度级别方面,中等难度获得了最多的支持,其次是较易和困难级别。

数独挑战性参与者普遍认为数独游戏具有挑战性,主要原因有: - 需要逻辑推理能力 - 提供了解决问题的机会 - 可以锻炼思维能力近半数参与者表示愿意尝试更难的数独谜题。

数独游戏实验报告 (1)

数独游戏实验报告 (1)
二、打印装订要求一、一概用A4纸,双面打印,并左侧装订。报告正文部份均采纳宋体小四。《课程设计报告说明》页也打印。二、课程设计概述部份占一页;课程设计内容长度依如实际需要填写;结论和指导教师评语及成绩单独占一页。保证打印格式工整。3、指导教师评语及成绩部份由指导教师填写。三、报告内容要求一、课程设计目的结合实际自己写,不要类似。二、课程设计原理简要说明所完成课程设计项目所涉及的理论知识。3、课程设计内容 这是课程设计报告极为重要的内容。归纳整个课程设计进程。(最好在上述内容基础上画出相应的流图、设计思路和设计方式,再配以相应的文字进行说明。)篇三:人工智能课程设计报告(数独游戏)人工智能课程设计报告数独游戏班 级:学 号:姓 名: 指导教师: 日 期:一、游戏介绍:
本算法采纳“挖洞”思想。通过以下两步生成数独题:1)运用拉斯维加斯随机算法生成一个终盘;2)采纳以下3个操作“抹去”一部份数字来生成数独题:①依照所需要的难度品级选取一种挖洞顺序;②通过深度优先搜索来求解,从而保证“挖去”一个数字后该数独题仍有唯一解③引入剪枝技术来幸免无效的“挖洞”尝试。伪代码:start 生成一个完整的终盘;if(true)生成成功;else 进行循环,直到终盘为true,即可解;then 依照难易成都,随机去掉几个数,进行检测;if(检测成功){输出};else{从头“挖洞”},直到成功;二、问题的分析要能保证算法生成的数独题具有可转变的难度和唯一解,该算法内部应该包括有对数独题的求解和评级功能。在此将该算法的设计工作分为生成、求解2部份工作(均在类KSudokuCaculate中):(1)先生成一个终盘,存在一个二维数组中。(2)依照游戏者需求的难度品级,咱们从已知格的总数和散布来确信“挖去”的个数。3、生成终盘(算法如下) 成立一个新类KSudokuCaculate,在类里面编写下面源代码boolKSudokuCaculate::MakeSudokuData(SUDOKUMATRIX

数独初探结题报告

数独初探结题报告原高一二班数学研学小组陆诺南I.我们的预期目标:一、每个组员了解了数独的基本规则二、每个组员掌握了以下基本数独解法1基础摒除法2唯一解法3唯余解法4区块摒除法5余数测试法6隐性唯一候选数法7三链数删减法8隐性三链数删减法三、能够欣赏一些变形数独II.我们的研究过程在整个研学过程中,每个同学始终坚持每周完成1-2篇数独题。

并总结方法,记录心得。

李天同同学始终坚持记录研学过程报告III.我们的研究方法在本次研学中,我们运用了综合的研究方式。

采用个人独立研究和小组合作研究相结合的形式,事半功倍。

运用科学的研究方法解决实际问题,例如文献研究法、实验研究法和观察研究法。

Ⅳ.我们的研究成果一、自主钻研并总结基础摒除法基础摒除法就是利用 1 ~9 的数字在每一行、每一列、每一个九宫格都只能出现一次的规则进行解题的方法。

基础摒除法可以分为行摒除、列摒除、九宫格摒除。

实际寻找解的过程为:寻找九宫格摒除解:找到了某数在某一个九宫格可填入的位置只余一个的情形;意即找到了该数在该九宫格中的填入位置。

寻找列摒除解:找到了某数在某列可填入的位置只余一个的情形;意即找到了该数在该列中的填入位置。

寻找行摒除解:找到了某数在某行可填入的位置只余一个的情形;意即找到了该数在该行中的填入位置。

二、自主钻研并总结唯一解法当某行已填数字的宫格达到8个,那么该行剩余宫格能填的数字就只剩下那个还没出现过的数字了。

成为行唯一解.当某列已填数字的宫格达到8个,那么该列剩余宫格能填的数字就只剩下那个还没出现过的数字了。

成为列唯一解.当某九宫格已填数字的宫格达到8个,那么该九宫格剩余宫格能填的数字就只剩下那个还没出现过的数字了。

成为九宫格唯一解.三、自主钻研并总结唯余解法唯余解法就是某宫格可以添入的数已经排除了8个,那么这个宫格的数字就只能添入那个没有出现的数字.四、自主钻研并总结区块摒除法区块摒除法是基础摒除法的提升方法,是直观法中使用频率最高的方法之一.五、自主钻研并总结余数测试法所谓余数测试法就是在某行或列,九宫格所填数字比较多,剩余2个或3个时,在剩余宫格添入值进行测试的解题方法.六、自主钻研并总结隐性唯一候选数法当某个数字在某一列各宫格的候选数中只出现一次时,那么这个数字就是这一列的唯一候选数了.这个宫格的值就可以确定为该数字.这时因为,按照数独游戏的规则要求每一列都应该包含数字1~9,而其它宫格的候选数都不含有该数,则该数不可能出现在其它的宫格,那么就只能出现在这个宫格了.对于唯一候选数出现行,九宫格的情况,处理方法完全相同。

数独实验报告范文

( 实验报告)姓名:____________________ 单位:____________________ 日期:____________________编号:YB-BH-053875数独实验报告范文Model of Sudoku experiment report数独实验报告范文Sudoku 数独实验报告一、算法描述求解Sudoku让人最容易想到的方法是穷举每个方格可能的值,如果符合条件,则得到解,不符合条件则进行回溯。

通过递归的方法,显然可以得到数独的解。

我想到的简单的递归方法,是每一行从左到右,试验每一个方格可能的数字,进行递归。

这种方法看似非常麻烦,实际上对于一般的数独题,速度是非常快的,思想比较简单,写出来的代码也非常简单、易懂。

算法1:简单递归方法从第一个格开始,从1到9试验,是否满足行、列、九宫格互不相同的条件。

若满足条件,则填入该数字,再试验下一个格。

当一个格子出现没有数字能填的情况时,说明已经填的数字有误,回溯,再进行递归。

算法2:优化的递归算法先遍历所有格子,统计每种格子可能出现数字的个数。

每次挑选可能出现数字个数最少的格子来进行递归。

设置三维数组poss[i][j][k]来存储可能出现数字的信息。

poss[i][j][0]记录i行j列的格子可能出现数字的个数,poss[i][j][k](1<=k<=9) 若poss[i][j][k]=1,表示k可能在(i,j)格出现。

若poss[i][j][k]=0,表示k不可能在(i,j)格中出现。

每次找poss[i][j][0]最小的格子,来进行下一个递归。

算法3:生成数独棋盘的算法我最开始的想法是穷举法,随机生成满足行各不相同的9行,再判断9宫格、每列是否符合要求,符合条件时,随机生成停止。

然而,这种算法的当然时间复杂度显然是过高。

第99一步的随机生成的次数是9*9/P9=9608。

随机生成一组棋盘耗时就非常大。

后来,我从求解的个数的程序获得启发。

数独游戏课程设计报告

数独游戏课程设计报告将“数独”智力游戏的难度划分与创建问题分解为建立终盘和初盘、难度评分、游戏创建。

首先采用行列变换的方法建立终盘,然后隐去部分数字并检验解唯一性,得到初盘。

在已得到初盘的基础上,根据求解时初级方法和高级方法使用的次数确定难度评分,从而依据分数对题目的难度进行划分,以此创建不同等级难度的“数独”游戏。

最后通过实验验证了模型的实用性。

下面是的数独游戏课程设计报告,欢迎来参考!“数独”是18世纪瑞士数学家欧拉发明。

该游戏是在9×9的单元网格中进行,这些网格被分9行、9列和3×3个九宫格。

单元网格中已有若干数字,其余均为空格。

玩家需要推理出所有剩余空格的数字,并满足每一行、每一列、每一个小九宫格内的数字均含1-9且不重复。

每一道合格的“数独”谜题都有且仅有唯一答案。

目前,“数独”作为一种智力游戏已经风靡世界,国内外许多学者已对数独的求解算法做了深入研究,例如递归法[1]、回溯候选数法[2]、枚举算法[3]等,但在数独的难度划分与创建方面的研究还很少。

由于影响“数独”难度的因素有很多,就问题本身而言,难度因素包括最高难度的技巧、各种技巧所用次数、是否有隐藏及隐藏的深度和广度的技巧组合、当前盘面可逻辑推导出的个数等等;就玩家而言,了解的技巧数量、熟练程度、观察力等也属于难度划分应考虑的因素。

因此,单单利用空格数或求解时间对题目难度进行划分是不全面的,其难度指标定义过于主观,讨论也不够细致,无法真正划分难度的级别。

本文首先创建符合要求的“数独”终盘,然后在终盘的基础上生成具有数独特性的初盘,根据求解时初级方法和高级方法使用的次数确定难度评分,从而依据分数对题目的难度进行划分,以此创建不同等级难度的“数独”游戏。

1终盘和初盘生成首先运用初等行、列变换,构造一个新的简单明了的终盘生成算法,具体步骤如下:Step1:从行的角度出发,在第一行随机输入1-9的数字。

以一个小九宫为单位,将相邻三个数字作为一个集体进行交替,由此获得第二行的数字,再由第二行的数字根据前述方法变换得到第三行的数字。

Android 数独游戏实验报告

<RelativeLayout//相关布局 xmlns:android="/apk/res/android" xmlns:tools="/tools" android:layout_width="match_parent" android:layout_height="match_parent" ...//布局的设置选项 tools:context="com.example.sudoku.Sudoku" > <LinearLayout //线性布局 ...//设置布局的格式
* @param y */ private void select(int x,int y){
... } /** * 获取触模板输入 */ @Override public boolean onTouchEvent(MotionEvent event) {
... } } 2. 游戏主控程序 1)Sudoku.java
} 1 //模拟绘制网格,通过绘制线条和数字来实现单元格、显示区域、显示
处理键盘 @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { ...//九宫格的尺寸设置 } private void getRect(int x,int y, Rect rect){ rect.set((int)(x*width), (int)(y*height), (int)(x*width+width), (int)(y*height+height));// 注 意 此
}
//画数字 ... //摆放数字 ... 3 //画提示 //定形 ... //获取光标的区域 /** * 重写 onKeyDown 方法,来获取改变选中区域 * 通过 select 获取十子方向键来表示光标的移动 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { ... } /** * 1. 首先获取选中区域的位置 * 2. 通过 getRect 计算新的矩形区域 * 3. 通过 invalidate 将矩形标记已过期 * @param x
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档