码迷,mamicode.com
首页 > 其他好文 > 详细

软件工程—个人项目(三)对于生成数独部分的总结

时间:2020-01-16 21:48:45      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:难度   考试   计组   总结   目的   数量级   数独   更新   问题解决   

  前几天忙着复习计组和软工考试了,断更了几天。

  看到这个题目的时候起初感觉暴力做就OK了,但是回头看见一个1e6发现事情并不简单,数量是可以达到的(详见第一篇),但是细节上如果不到位的话,1e6数量级的数独是很难在短时间内输出的。再加上不能有重复的数独,所以难度就又增加了。

  我查阅了一些资料。发现可以把第一行向右平移一定的位数,只要每一行平移的次数和之前的任意一行不一样,那么每一列也不会有重复的数字。接下来,考虑九宫格的不重复问题,我们只需要将每三行看成一组,组内向右移动都移动相差3的倍数个单位时就可以保证每宫内没有重复的数字。

  这样做有几个好处,首先是生成的一定是数独,不用判定是不是数独。然后是没有重复数独。第一行不动,第二三行都可平移3或6个单位,我们记为036和063,456行的平移就很随意了,我们可以选择1,4,7三个数字自由组合就有了6种,789行选择2,5,8又有了6种,此时,对于每一个第一行排列就会有72种了,那么40320*720比1e6要大。

  生成算法没有问题,然后是输出数独,由于在阅读相关博客时发现边生成边输出的方式实在太耗时间,所以采用了开大缓冲区的方法,先生成,然后一次性输出到文件中,最后发现输出时间很短,不足一秒。

  至此数独生成问题解决。

  相应代码稍后更新到GitHub上。

  项目完成后会有一篇包含所有内容的总结博客。

软件工程—个人项目(三)对于生成数独部分的总结

标签:难度   考试   计组   总结   目的   数量级   数独   更新   问题解决   

原文地址:https://www.cnblogs.com/fasl/p/12203356.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!