个人项目——数独游戏

本文详细介绍了数独游戏项目的开发过程,包括数独终局的生成、解数独的算法及UI设计。作者通过分析人的解题思路,采用计算机猜测法进行数独解题,并通过特定步骤生成数独题目。

个人项目——数独游戏

我项目的github链接 :https://github.com/gmj0301/gmj
博客的链接:
个人项目——数独游戏
数独 ( 二 ) ——生成数独终局
数独 ( 三 ) ——解数独
数独(四)——测试与性能分析
数独(五)——总结
数独(六)—— UI界面

PSP表

下面是我预计在项目上花费的时间。

PSPPersonal 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)在第一步产生的数独终盘中,根据难易程度,在终盘上挖掉不同数目的数字。
而产生一个数独终盘的办法有很多,比如矩阵转换法、两个数互相交换法、调整行或者列、随机法。

对于该项目的具体思路、设计过程还有开发过程会在之后的文章中提到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值