GITHUB地址:https://github.com/qq578503760/20177629
解题思路
题目刚开始的时候,感觉应该就是一个数独问题,然后第一反应就是一个一个填,填完看冲不冲突。
于是之后就去网上找找算法推荐,大部分都是回溯。
我看到网上有用TXT读写这道题的,把题放入二维数组再放入ArrayList中。
把题分开取出再去解,从1到9全部试一遍,每行每列每个九宫格测试,没问题就下一个继续试,1到9都不行就回溯到上一个再试。
画个流程图
代码部分
参数处理
参数是:m(几阶的数独)n(几次测试)i(输入intput)o(输出output)
简便处理取第1 3 5 7个元素
输入
根据网上所用TXT来读写取数独题,放入ArrayList中。
解题
每一个数独题都要通过solve解出来后存放至ArrayList最后再写入到文件里。
-solve-
把所有的数独题都用solve方法,每一个填的空都要用test方法检查,如果没有问题的话就检查下一个,如果出现重复就回溯。
-test-
行测试列测试,不出现冲突(阶数为4 6 8 9时进行宫格测试)
输出
输出到文件里
JProfiler的性能分析
可以发现test方法和所显示的langStringreplaceAll调用较为频繁,可以考虑优化。
PS:虽然是邓畅伟推荐的分析软件,但是还是不太会用,还是百度怎么用了才点出来的。
测试结果
因为测试了很多阶数的数独题,所以不一一展示。挑出做了宫格测试的和没做宫格测试各一个展示(八阶和五阶的)。
总结:
其实对于这一次作业来说,花费了很多的时间去找资料,比如像看到用文件流,然后就自己去百度了很多关于文件流的用法啊之类的资料。
然后在算法上,我百度了许多关于数独解题的算法,最后没办法还去麻烦了两波邓畅伟大佬,一波算法一波JProfiler,那做的感觉发际线
都高了几厘米。光是能完成都已经很伤脑了,还要去改进在下真的做不到啊。(不说了,我还要去完成别的课的作业和笔记,这几天搞这个,
其他课的笔记和作业全都没动。)