拉丁方怎样构造

rt
给定n,要所有n*n阶拉丁方
c程序

刚编写了一个程序
你可以输入3,4, 看看结果。输入5的话,因为它有161280个解。所以会运行很长时间。
#include <stdio.h>
#include <memory.h>
int data[100][100];
int n;
int count=0;
bool isok(int i,int j,int k)
{
for(int it=0;it<j;it++)
{
if(data[i][it]==k)
return false;
}
for(int jt=0;jt<i;jt++)
{
if(data[jt][j]==k)
return false;
}
return true;
}
void go(int i,int j)
{
if(i==n)
{
count++;
for(int m=0;m<n;m++)
{
for(int t=0;t<n;t++)
{
printf("%-3d",data[m][t]);
}
printf("\n");
}
printf("\n");
return;
}
for(int k=1;k<=n;k++)
{
if(isok(i,j,k))
{
data[i][j]=k;
if(j+1==n)
go(i+1,0);
else
go(i,j+1);
}
}
}
void main()
{
memset(data,0,sizeof(data));
scanf("%d",&n);
go(0,0);
printf("总数=%d\n",count);
}
有问题hi我。
温馨提示:答案为网友推荐,仅供参考
相似回答