#include<iostream>
using namespace std;
typedef struct node
{
int data;
struct node* next;
}seqList,*linkList;
linkList CreatlinkList(int x)
{
linkList head = NULL;
linkList s, r;
int i;
r = head;
for (i = 0; i < x; i++)
{
s = (linkList)malloc(sizeof(seqList));
s->data =0;
if (head == NULL)
{
head = s;
}
else
{
r->next = s;
}
r = s;
}
r->next = head;
return head;
}
//链表赋值
void Setdata(linkList head,int n)
{
linkList p;
p = head;
int j = 0;
for (; j < n; )
{
p->data = j + 1;
p = p->next;
j++;
}
}
//打印输出结果
void outALLprint(linkList head, int n)
{
linkList q;
q = head;
for (int i = 0; i < n; i++)
{
linkList p;
p =q;
for (int i = 0; i < n; i++)
{
linkList s;
s = p;
for (int j = 0; j < n; j++)
{
cout << s->data << " ";
s = s->next;
}
p = p->next;
cout << endl;
}
cout << "-----------------------" << endl;
q = q->next;
}
}
//第一次输出打印
//void outprint(linkList head,int n)
//{
// linkList p;
// p = head;
// for (int i = 0; i < n; i++)
// {
// linkList s;
// s = p;
// for (int j = 0; j < n; j++)
// {
// cout << s->data<<" ";
// s = s->next;
//
// }
// p = p->next;
// cout << endl;
// }
//}
int main()
{
linkList p;
int n;
cout << "请输入拉丁方阵的阶数:" << endl;
cin >> n;
p = CreatlinkList(n);
Setdata(p, n);
cout << "全部拉丁方阵为:" << endl;
outALLprint(p, n);
return 0;
}