其他分享
首页 > 其他分享> > 数独sudoku(一)题目分析

数独sudoku(一)题目分析

作者:互联网

  大家伙,今天我开始更新博客了。
  这系列博客我将逐步介绍我在完成sudoku这个课程大作业的进展,以及一些个人所思与收获。这是我第二次发表博客,也是第一次写技术博客。肯定有不少同学和我一样是因大作业任务要求开始写博客,我觉得这步跨越很有意义,写博客能让我们将输入转化为输出,加深理解与记忆,把问题分析得更加透彻。sudoku是软件工程的大作业,其实这个任务并不难,也有很多资料可循,但是通过这个不算难的任务掌握软件设计的流程是更关键的。这也是我第一次接触软件开发,会接触很多新的知识与技巧,但是万事开头难,我将尽己所能努力实现这个小游戏,当然更重要的还是过程。
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
  首先给出任务的详细要求:https://github.com/surpasss/software-engineering/blob/master/项目要求.pdf
  有三个子任务:
  1. 生成终局,命令行输入形式为:sudoku.exe -c n(n为生成不重复终局的数量, 1<=n<=1000000),生成的终局保存在sudoku.txt文本文件中。
  2. 求解数独,命令行输入形式为:sudoku.exe -s path,从路径中读取数独题目,将每个题目的一个可行解保存在sudoku.txt文本文件中。
  3. GUI游戏,随机生成初始数独棋局,玩家提交后得到反馈是否做对。
  从任务评分规则可以看出除了基本的博文规范,还要求生成终局这个子任务的运行时间尽可能短,因此需要使用性能分析工具进行分析,之后优化处理得到更好的性能。而对另外两个子任务没有做过多要求,实现基本功能即可。
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
  这里我补充解释下什么是数独,数独由9个33小棋盘组成的99的大棋盘,小棋盘包含1~9这9个数字,大棋盘的每一行、每一列的9个数字均不相同,即每一行、每一列都包含1~9这9个数字。
  之前也花了一些时间在网上看了一些相关资料,谈谈当前我对这三个子任务的简单理解。首先是生成终局,这是有规律可循的(至于规律我们下期再说),要不然1e6这个数字也太大了。找到规律了,问题就可以入手了,主要是如何性能优化,下期再细说;第二个求解数独的任务应该是最复杂的一块了,需要用到算法上的回溯与递归,代码量比较庞大;至于最后的GUI游戏,并没有涉及到什么算法上的知识,很容易判定玩家是否做对,关键是如何生成这个游戏页面,我在网上看到用C#和Java实现得比较多。
  总而言之,这个大作业并不算难,但是对于我这个软件开发的新手来说,还是很具有挑战性和有意义的。下面给出开始实现程序之前的PSP表格,这上面的预估计时并不会影响我实际的花费时间,与实际耗时可能有较大出入,因为很多东西都是现学,初学阶段过程和方法最重要。

  先这样了,后续内容敬请期待。

标签:sudoku,题目,博客,生成,任务,终局,数独
来源: https://www.cnblogs.com/zyj-surpass/p/12096606.html