拉丁方阵是一种 n × n 的方阵,在这种 n × n 的方阵里,恰有 n 种不同的元素,每一种不同的元素在同一行或同一列里只出现一次。
#include<stdio.h>
#include<stdlib.h>
typedef struct Node* LinkList;
struct Node
{
int data;
struct Node *next;
};
//初始化循环链表(尾插法)
LinkList CreateList(int m)
{
LinkList p,L,s;//头结点L
p=L=(LinkList)malloc(sizeof(Node));
L->next=L;
int i=1;
while(i<=m)
{
s=(LinkList)malloc(sizeof(Node));
s->data=i++;
s->next=L->next;
p->next=s;
p=s;
}
return L;
}
//输出矩形数据
void print(LinkList L,int m)
{
LinkList s,p=L->next;
for(int i=0;i<m;i++)
{
s=p;
for(int i=0;i<m;i++)
{
printf("%d ",p->data);
p=p->next;
}
putchar('\n');
p=s->next;
}
}
int main()
{
int m;
printf("生成1到几的拉丁方阵:");
scanf("%d",&m);
LinkList L;
L=CreateList(m);
print(L,m);
return 0;
}