0个测试样例,然而zoj中的测试样例可能有数万个,所以建议改成在while里面直接输出。
如果不管m[20]的问题,你的算法可以举两个反例如下:
3
...
..X
.X.
3
...
..X
.XX
正确答案应该是4 3, 而你的输出是3 2.
事实上,所有的测试数据总共有2^1 + 2^4 + 2^9 + 2^16 大约7万个左右,我通过如下一段代码生成所有的测试数据:
/*****************************************************************/
#include
#include
#include
char A[4][4];
int n;
FILE *pFile;
void output(int i, int j)
{
int pi,pj;
if(i==n-1 && j==n-1)
{
A[i][j]='.';
fprintf(pFile,"%d\n",n);
for(pi=0; pi
for(pj=0; pj
fprintf(pFile,"\n");
}
A[i][j]='X';
fprintf(pFile,"%d\n",n);
for(pi=0; pi
for(pj=0; pj
fprintf(pFile,"\n");
}
}
else
{
A[i][j]='.';
if(j
else if(i
A[i][j]='X';
if(j
else if(i
}
}
int main()
{
pFile = fopen("Test.txt","w");
for(n=1; n<=4; n++)
{
output(0,0);
}
n=0;
fprintf(pFile,"%d\n",n);
fclose(pFile);
return 0;
}
/******************************************************************************************/
生成的数据存储在Test.txt中,然后我自己写过一段该题目的正确代码,如下:
/***************************************************************************************************/
#include
#include
#include
int n,m,pi,pj;
int b[4][4];
void num()
{
int p_i,p_j,i,j;
for(p_i=0;p_i
if(b[p_i][p_j]>=0)
{
b[p_i][p_j]=0;
for(i=p_i,j=p_j-1;j>=0&&b[i][j]!=-1;j--)
if(b[i][j]!=-3)
b[p_i][p_j]++;
for(i=p_i,j=p_j+1;j
b[p_i][p_j]++;
for(i=p_i-1,j=p_j;i>=0&&b[i][j]!=-1;i--)
if(b[i][j]!=-3)
b[p_i][p_j]++;
for(i=p_i+1,j=p_j;i
b[p_i][p_j]++;
}
}
}
void FindMin()
{
int i,j,minimal=100;
for(i=0;i
if(b[i][j]
{
minimal=b[i][j];
pi=i;
pj=j;
}
}
for(j=pj+1;j
b[pi][j]=-3;
for(j=pj-1;j>=0&&b[pi][j]!=-1;j--)
if(b[pi][j]>=0)
b[pi][j]=-3;
for(i=pi+1;i
b[i][pj]=-3;
for(i=pi-1;i>=0&&b[i][pj]!=-1;i--)
if(b[i][pj]>=0)
b[i][pj]=-3;
}
int isfull()
{
int i,j;
int is=1;
for(i=0;i
return is;
}
void count()
{
while(!isfull())
{
num();
FindMin();
b[pi][pj]=-2;
m++;
}
}
int main()
{
int i,j;
char c;
scanf("%d",&n);
while(n)
{
c=getchar();
for(i=0;i
for(j=0;j
c=getchar();
if(c=='X') b[i][j]=-1;
else if(c=='.') b[i][j]=0;
}
c=getchar();
}
m=0;
count();
printf("%d\n",m);
scanf("%d",&n);
}
return 0;
}
/**************************************************************************************************/
我把你的代码编译生成exe文件: 1.exe
再把我的代码编译生成exe文件: 2.exe
然后把两个exe以及Test.txt放到一个文件夹,创建批处理文件cmp.bat,内容如下:
1.exe
2.exe
fc out1.txt out2.txt >result.txt
大意是以Test.txt为输入分别生成输出out1.txt和out2.txt,然后通过C:\Windows\System32下的工具fc.exe比较out1.txt和out2.txt的内容,将不同的部分列出输出到result.txt中。最终就可以得到你的代码的失败样例。
另外,站长团上有产品团购,便宜有保证