下面来说一下实现生成数独和解数独的大致设计。
首先,整个项目大概包括两部分,生成数独和解数独,这两部分基本是相互独立的。
生成数独的部分比较简单,只需要一个函数即可。解数独的部分我会写一个DLX类,来实现DLX精确覆盖的功能,还需要一个函数读取待解数独,构造DLX求解并输出。
由于解数独部分设计大量计算和I/O,之后可能会加入多线程,如果效果不好的话再通过Github版本回退。
还有就是解析命令行指令的部分,因为MSVC没有getopt,但是getopt是个开源函数,我可以在Github上找一份开源代码贴到项目中。
对于生成数独的单元测试,我准备先用小用例(大概1000组)来验证生成终局的正确性以及是否冲突,然后再用大用例(1e6组)来测试单元性能。
解数独部分的单元测试类似,加入多线程分开处理计算和I/O之后再测试性能来决定是否有必要保留多线程。
中间会根据测试结果改进代码,我估计这部分会耗费比编写代码更长的时间。