软工个人项目中的部分debug和我的参考资料

1、next_permutation函数:找到下一个全排列

http://www.cplusplus.com/reference/algorithm/next_permutation/
!!!特别需要注意的是next_permutation(a,b)中的参数a和b,其表示的范围是**[a,b)**。

2、vs2015自带的性能分析工具

参考链接:https://blog.csdn.net/luoweifu/article/details/51470998

3、文件输入输出

在网上查阅资料发现用c++进行文件输入输出比c慢了接近20倍,因此选择c语言方式的文件输入输出,即fputc,fputs…

4、利用回溯法很慢,需要优化

利用空间来省时间,记录下所在行、列、宫的0-9的覆盖值。
参考了博客:https://blog.csdn.net/m0_37590629/article/details/79902552
利用一个大小visit[3][10][10]的数组记录下每行/列/宫的1-9数字的是否填写的状态,第一维表示选择宫还是行还是列,0表示宫,1表示行,2表示列;第二维表示第几宫/行/列,第三维表示该宫/行/列的1-9数字;而visit[i][j][k]的值为0则表示没有填入,1则表示填入了。
举个例子,比如visit[0][1][2]=1即表示第1宫中2这个数字已经填入,再比如visit[1][2][4]=0即表示第2行中4这个数字还未填入
通过这个数组,我们可以通过查找数组中某一个值即可判断是否这个数字已经被填入,只需要不断更新这个数组,填写的时候查找这个数组即可,而不需要原始回溯一样不断遍历。这样可以减少遍历时间。

5、关于将数组从文件读出进行处理

最开始想着以空间换时间,想用一个save[1000000][85]的数组存下所有的数据再一起处理,但缓过神来后,发现超过了最大大小,于是只能存到一个9*9的数独就解。

6、一定要在操作文件后关闭文件,不然会产生错误!!血的教训!!

之前没有用fclose,进行命令行参数运行时,发现文件总是写到一半就没有继续写入,debug很久都不知道是因为什么原因。后来发现文件在我没有注意的时候还会改变大小,所以再仔细看了一下写入文件步骤,发现fclose很关键!!!!

7、单元测试的配置问题

需要建立与源文件的外部依赖和头文件里要加上源文件
参考资料:https://www.cnblogs.com/xiaoxt/p/5511005.html

8、需要初始化print数组

最开始单元测试连续一起测试十个的时候,总是会有两个出错。但单独测试这两个的时候就没有错了。后来发现是因为我的print数组没有初始化,导致连续测试出现了错误。

猜你喜欢

转载自blog.csdn.net/hhhhhhh455/article/details/85375670