个人项目——数独

个人项目——数独
先贴个Github地址:https://github.com/SeewoLT/Seewo_Project
再附PSP表一份:
Personal Software Process Stages估计耗时(分钟)实际耗时(分钟)
计划3040
需求分析(包括学习新技术)00
生成设计文档00
设计复审00
代码规范00
具体设计300360
具体编码600530
代码复审5030
测试200230
测试报告6050
总结改进6050
合计13001290
 

解题思路:
说来惭愧,其实小编没啥思路,全都是借鉴网上朋友们的经验分享才勉强规划出接替途径。

该个人项目有两项要求,一个是生成数独终局,还有一个是解数独再把解出来的数独保存到程序根目录中。

第一个要求:
可以知道,对于任何一个1~9的全排列,都可以通过向左或者向右移动固定不变的列数来得到一个新的终局。这样就有9!种终局。
其实,还可以看到,对于任何一个数独终局的1~3行,任意交换这三行的顺序,也是一个数独终局,4~6行和7~9行同理,列也同理。通过这个发现可以在之前的基础上又能有所增加,最终是可以超过1E6个的。

第二个要求:
为了不让脑细胞死得太多,于是我就直接用DFS暴搜的方法把这问题给解了……
DFS部分代码
int Hang = count / 9;
int Lie = count % 9;
if (Plate[Hang][Lie] == 0)
{
for(int i = 1; i <= 9; i++)
if (CHECK(i, Hang, Lie))
{
Plate[Hang][Lie] = i;
SOLVE(count + 1);
}

Plate[Hang][Lie] = 0;
}
else SOLVE(count + 1);


-------------------

总结
这里还是要惭愧地说一下,我到现在还不太会弄VS性能分析工具,所以也就没有再贴代码的性能图示了……

然后再说说我不足的地方,首先我对文档、模块的建立概念完全不清晰,我所有的功能函数都写在一个文件里,其实这与懒脱不了干系……

接着我也了解到一些网友在第二个要求:解数独运用了效率更高的函数功能DLX,将解数独转化成了一个精确覆盖问题,并用Dancing Links X即DLX算法来解决精确覆盖问题,但从来没有仔细揣摩揣摩去实现这项功能。

其实总结起来就是这两个问题,还是有很多遗憾的地方和提升空间。

心路历程和收获
说实话,刚开始写个人项目的时候,那真是摸不着头脑。没办法,最后都是需要朋友们的帮助才有思绪,把一个个“难题”给弄通了。其实与其说是朋友们的帮助,还不如说我网上收资料一个个翻出来呢……
说真心话,我一开始就被系统输入变量参数如何操作给弄懵了,还有如何运用getopt函数也是弄得我焦头烂额。

最后的最后我想总结三点收获:
1.不要拖。
2.不畏难。
3.不停学。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值