“对拍“是什么
我们在调试代码时,经常会遇到困难,其中之一是程序检查不出错误,手造数据太麻烦。如果我们可以很快写出一种暴力但复杂度较高的程序,用于对比两个代码的运行答案,则可以使用对拍来检查程序存在的问题。
对拍的步骤
需要准备的文件(在同一目录下)
mk.cpp
在对拍之前,我们需要写一个mk.cpp来造数据
在main函数的前面写上一句
freopen("1.in","w",stdout);
意为:该程序运行的结果输出到名为1.in的文件里,文件打开方式为”写“(w:write),输出方式为标准输出。
mk.cpp的作用是造随机数据,所以程序里要随机出输入的数据,比如n,m,边权等,并且按给定输入格式输出到文件中。
std.cpp
用于对比答案的暴力程序。在main函数内第一行写上:
freopen("1.in","r",stdin);
意为:该程序运行时将从1.in中读入数据,文件打开方式为”写“(r:read),输入方式为标准输入。
紧接着第二行写上:
freopen("std.out","w",stdout);
意为:程序以写的方式打开std.out文件,输出方式为标准输出。
写上这两句后,该程序的输入就能读入用mk.cpp造的数据,并且将运行结果输出到std.out中。
solver.cpp
这是你在调试中的程序。在main函数的前两行写上:
freopen("1.in","r",stdin);
freopen("solver.out","w",stdout);
从1.in读入数据,输出结果到solver.out中
以上程序按顺序编译运行后,得到的exe文件也要在同一目录下。
然后就可以写一个在windows下对拍的命令行啦!
windows命令行
step 1
新建文件 dp.bat
右键,点击编辑
step 2
在编辑框内写上
mk//运行mk.exe
std
solver
fc solver.out std.out//对比两个文件,fc :file compare
if errorlevel=1 pause//如果对比出现不一致,停止程序
%0//不关闭命令窗口
保存
step 3
点击dp.bat
文件,即可自动运行
step 4
观察运行结果,如果有不一致的地方,会将输入数据,两个程序的运行结果显示在黑框内,利用该组数据来调试即可
原文地址:https://www.cnblogs.com/JWizard/p/12210005.html