拉丁方陣是壹種n×n的方陣,方陣中恰有n種不同的元素,每種元素恰有n個,並且每種元素在壹行和壹列中 恰好出現壹次。著名數學家和物理學家歐拉使用拉丁字母來作為拉丁方陣裏元素的符號,拉丁方陣因此而得名。例如下圖是壹個3×3的拉丁方陣:
3 2 1
2 1 3
1 3 2
如果壹個拉丁方陣的第壹行和第壹列按照元素的先後順序來排列,那麽這稱為拉丁方陣的標準型,例如下 圖就是壹個3x3的拉丁方陣標準型,第壹行和第壹列都是”1 2 3”。
1 2 3
2 3 1
3 1 2
C語言
//t=0時,不是拉丁方陣
//t=1時,是拉丁方陣
//t=2時,是標準型拉丁方陣
#include<stdio.h>
#include<string.h>
int a[101][101],b[101][101],c[101][101];
#define clr(x) memset(x,0,sizeof(x))
int main()
{
int n,i,j,k,t;
while(scanf("%d",&n)&&n)
{
t=1;k=1;
clr(a);clr(b);clr(c);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
b[i][a[i][j]]++;
c[a[i][j]][j]++;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(b[i][j]!=1||c[i][j]!=1)
{t=0;break;}
}
/*判斷是否是標準型*/
if(t){
for(i=1;i<=n;i++)
if(a[1][i]!=i||a[i][1]!=i)
{k=0;break;}
if(k)t=2;
}
printf("%d\n",t);
}
}