for (psnew=head->next; psnew->next!=NULL; psnew=psnew->next) //判断正交拉丁方阵组的存在性,并输出正交拉丁方阵组
{
for (tail=psnew->next; tail!=NULL; tail=tail->next)
{
memset(hold[0], 0, N*N*sizeof(int)); //判断正交前把计数矩阵清零
flag=0;
for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
{
hold[*(psnew->Pa[i]+j)-1][*(tail->Pa[i]+j)-1]++;
if (hold[*(psnew->Pa[i]+j)-1][*(tail->Pa[i]+j)-1]>1) //判断基拉丁方阵是否正交
{
flag=1;
break;
}
}
if (flag==1)
break;
}
if (flag==0) //找到一对正交拉丁方阵组输出
{
k=1;
printf("正交拉丁组:\n");
printf("第一组\n");
output(psnew, fac, factor);
printf("第二组\n");
output(tail, fac, factor);
}
}
}
if (k==0)
printf("不存在N阶正交拉丁方阵组\n");
&