北京理工大学2019软件工程个人项目-数独-03

0. GitHub项目地址

本项目对应的GitHub代码仓库点此进入

2. 解题思路

2.2.2 数独的扩充

仅凭借上述方法构造的数独数目无法满足题目要求,因此我们对数独进行变换来扩充数独数目。

注意到,对于任何数独,都可以任意交换它的 1 ∼ 3 1\sim 3 13行, 4 ∼ 6 4\sim 6 46行, 7 ∼ 9 7\sim9 79行, 1 ∼ 3 1\sim 3 13列, 4 ∼ 6 4\sim 6 46列或 7 ∼ 9 7\sim9 79列而使得交换后的数独仍然是一个合法的数独。

对本项目而言,由于左上角的数字已经确定,所以无法交换第一行和第一列。同时,由于基本数独是通过取遍第一行的所有合法的列的排列产生的,交换数独中的列会导致和其他的基本数独重复。因此,仅能通过:

  • 交换2,3行
  • 任意交换4~6行
  • 任意交换7~9行

来产生新的数独。

据此可以使数独的数目变为原先的: 2 × 3 ! × 3 ! = 72 2\times3!\times3!=72 2×3!×3!=72倍,共计 72 × 40320 = 2903040 ≈ 2.9 × 1 0 6 72\times40320=2903040\approx2.9\times10^6 72×40320=29030402.9×106个数独。显然,我们已经找到了超过 1 0 6 10^6 106个数独,足以满足需求。

2.2 求解数独

对数独的求解较为简单,使用回溯法搜索所有可能结果即可。

3. 软件设计

在软件设计阶段,我们将设计第二章所述算法的程序结构。使用面向对象的方法对其进行分析和建模。分析过程如下。

3.1 用例图

分析需求中的使用者,仅有用户一个。更具需求描述,做出用例图如下。
用例图

3.2 类图

需求描述中涉及到的类与对象包括:

  • 数独
  • 数独求解器
  • 数独生成器

使用类图描述他们之间的关系,如下。
类图

3.3 顺序图

对生成数独终局的过程使用顺序图描述如下。

生成数独
对求解数独的过程使用顺序图描述如下。
在这里插入图片描述

4. 软件实现

在软件实现阶段,我们将实现第三章所述程序设计。

5. 软件测试

5.1 单元测试

5.2 集成测试

6. 性能改进

6.1 热点

6.2 改进

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值