软件工程基础个人项目——数独(3)

别来无恙 提交于 2020-01-20 07:56:24

软件工程基础个人项目——数独
点击这里可看github上具体链接

软件工程基础个人项目——数独

本次个人项目关于数独的生成与求解

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
Estimate 估计这个任务需要多少时间 1520
Development 开发
Analysis 需求分析 20
Design Spec 生成设计文档 60
Design Review 设计复审
Coding Standard 代码规范
Design 具体设计 120
Coding 具体编码 600
Code Review 代码复审 200
Test 测试(自我测试,提交代码,代码修改) 400
Reporting 报告 30
Test Report 测试报告 30
Size Measurement 计算工作量 30
Postme & Process Improvement Plan 事后总结并提出过程改进计划 30
合计 1520

思路描述

最开始看到题目的时候,感觉压力很大,因为在此之前我从未了解过数独,担心自己不能很好的理解数独,更不要说通过代码编写让计算机完成数独的求解和生成了。但是在网上是可以找到很多之前学姐学长们智慧的结晶,在本次个人项目上为我提供了很多帮助。我先从网上找寻了关于数独的有关内容,大致明白了数独的概念,也尝试的自己手动解了解数独。那么怎么更好的通过计算机实现数独的生成与求解呢。我看了很多相关博客,找到了我能理解也觉得比较简单的方法。
生成数独:先生成一个1-9的无重复的排列,再将此排列平移。除了第一行之外的每一行,都是通过第一行向右平移某位生成,出去的数字回到排列左端。
求解数独:
使用回溯方法,同时设立vis来确定是否可以将某数字放在某位置上,参考了之前某位学长或者学姐的博客,最终确定这个方法。

程序实现过程

数独的生成:
写一个函数Create_sudoku(),
这是我最开始的想法,后来为了方便管理,我写了一个class Sudo,在其中创建了create 函数。

数独的求解:
求解是solve函数,中心思想回溯由Traceback()执行,其中设立的vis数组判断数字是否可以放在某位置上。需要setvis(),resetvis(),checkvis(),共同完成其功能。

设计图

Created with Raphaël 2.2.0开始打开文件判断数独打印一个数独确认为0标记vis数组对非0位置进行标记回溯关闭文件结束yesnoyes
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!