[Andorid开发][算法分析与设计]数独游戏(舞蹈链)
前言:大一时的兴趣产物,现在补发上来。。
1、 需求分析与类设计
游戏界面主要由MainActivity和GameActivity实现,其中Sudoku是一个基于GameActivity的自定义View,Sudoku类实现了把数独问题转换为精确覆盖问题、再利用DLX类求解、根据解和定义的难度和维度随机出题、最后将题目绘制出来。
2、 算法设计与分析
利用舞蹈链处理数独问题,首先需要将数独问题转换为精确覆盖的问题,考虑到数独问题的四个约束条件:
1、 每个格子只能填一个数字
2、 每行每个数字只能填一遍
3、 每列每个数字只能填一遍
4、每宫每个数字只能填一遍
将矩阵的列定义为约束条件,得出转换关系:
然后用表示约束条件的bool型矩阵构造舞蹈链,然后回溯求解,最后用这个转换关系逆向转换就可以得出数独的解了!
3、功能展示
主界面(四宫、九宫、十六宫可选,分别又有简单、中等、困难三个模式):
随机性题库(图为九宫简单模式):
十六宫困难模式:
没有填完无法提交:
答对了:
答错了: