【软件工程基础】数独(个人项目)-设计实现及代码说明

设计实现
依照题目要求,我的整体设计则分为“生成终局”和“求解数独”两大部分,二者之间相对来说较为独立。
首先来说生成终局,按照上一篇博客所描述的方法,为了得到一定数量的不同数独,对数独的第一行可采取全排列的操作扩充数量,对数独的后几行,按照1-3行、4-6行、7-9行分为三组,分别给他们规定不同的移动方式扩充数量,直到数量达到要求。
对于求解数独,则用到了回溯法,依次对数字1-9进行尝试,首先在行、列寻找是否有要填入的数字,其次在宫格内寻找是否有要填入的数字,若均无,则可以将数字填入。
代码说明
生成终局部分我主要设置了permutation、changeSudoku、makeN三个函数:在这里插入图片描述
permutation函数和changeSudoku函数主要提供数独行的平移变换方式
在这里插入图片描述
makeN函数则实现按照变换规则得到规定数量的不同数独。
在主函数中生成终局的时候,还要进行一个输入合法的判断,若输入不合法则输出“Error!”

在这里插入图片描述
调用makeN函数得到N个数独终局,写入文件sudoku.txt中。
求解数独
求解数独部分只用了一个函数solve,其中的逻辑就是之前所描述的,先找需要填空的空格,找到空格后依次尝试1-9的数字,若同行、同列、同宫中均无,则填充合法,该位置填为该数字。
在这里插入图片描述
主函数中的求解数独部分,对于文件的操作较为复杂,涉及到读取一个文件、一定操作之后写入另一个文件,(由于我对于文件操作较为生疏,可能使用的文件相关函数比较混乱或者不是最合适的)这里分别用到了fopen、freopen、fscanf、和fclose。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值