我项目的github链接 :https://github.com/gmj0301/gmj
博客的链接:
个人项目——数独游戏
数独 ( 二 ) ——生成数独终局
数独 ( 三 ) ——解数独
数独(四)——测试与性能分析
数独(五)——总结
数独(六)—— UI界面
PSP表
下面是我预计在项目上花费的时间。
| PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 25 | |
| * Estimate | * 估计任务用时 | 25 | |
| Development | 开发 | 2015 | |
| * Analysis | * 需求分析(包括学习新技术) | 50 | |
| * Design Spec | * 生成设计文档 | 40 | |
| * Design Review | * 设计复审 | 15 | |
| * Coding Standard | * 代码规范 | 10 | |
| * Design | * 具体设计 | 70 | |
| * Coding | * 具体编码 | 1500 | |
| * Code Review | * 代码复审 | 130 | |
| * Test | *测试 | 200 | |
| Reporting | 报告 | 130 | |
| * Test Report | * 测试报告 | 55 | |
| * Size Measurement | * 计算工作量 | 40 | |
| * Postmortem & Process Improvement Plan | * 总结并题出改进计划 | 35 | |
| Total | 合计 | 2170 |
解题思路描述
数独是一种逻辑游戏。在一个九行乘九列的表格中填入1-9这九个数字。它要求满足每一行、每一列、每一个九宫格(3×3)内的数字均含1-9且不重复。数独题的要求为数独要有唯一解,表中已填满的空格不能与它所在的行、列、组重合。
该作业涉及生成数独终局、解数独、生成数独题目(UI界面里面涉及)三个部分。
我玩过数独游戏,对于解数独有一定的了解,但是对于生成数独终局却毫无头绪。
对此,我在网上查询了一些资料,怎么生成数独终局,怎么快速解数独之类的帖子和博客。
对于解数独,按照人的思维,常用的有三种方法:
1) 摒除法就是通过哪些格子不能填这个数从而得到一个唯一的这个数的填法。
2) 唯余法就是通过分析这个格子不能填什么数而得到这个格子的唯一填法。
3)强弱链则是通过分析数字与数字之间的逻辑关系而得到答案。
但是上述三种方法通过人的思维是很容易实现的,但是对于计算机程序而言,是很困难的。
对于计算机而言,猜测法才是最为实用的,DFS递归暴力破解,算法简单。
对于生成数独,我一开始的想法是直接随机在某些空格上生成数字形成数独题。但是经过思考后,我发现我找不到数独题目的特点,而且不一定有唯一解,我认为直接随机生成数字形成数独题目是很困难的。
经过学习,我发现生成数独题目的步骤是:
1)产生一个数独终盘(9X9)
2)在第一步产生的数独终盘中,根据难易程度,在终盘上挖掉不同数目的数字。
而产生一个数独终盘的办法有很多,比如矩阵转换法、两个数互相交换法、调整行或者列、随机法。
对于该项目的具体思路、设计过程还有开发过程会在之后的文章中提到。
本文详细介绍了数独游戏项目的开发过程,包括数独终局的生成、解数独的算法及UI设计。作者通过分析人的解题思路,采用计算机猜测法进行数独解题,并通过特定步骤生成数独题目。
636

被折叠的 条评论
为什么被折叠?



