问题解剖
实现代码
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}Node,*List;
//创建一个规模为n*n的循环链表
List createLoopList(List head,int n){
List p=head;
int i=1;
while(n--){
List new =(List)malloc(sizeof(Node));
new->data=i++;
p->next=new;
p=new;
}
p->next=head->next;
p=head->next;
free(head);
return p;
}
int main(int argc, char *argv[]) {
int n=0;
List head=(List)malloc(sizeof(Node));
printf("------------------拉丁方阵问题------------------------\n");
s: printf("请输入方阵的规模x(n):");
scanf("%d",&n);
if(n>0&&n){
head=createLoopList(head,n);
List p=head;
int i,j;
for(i=0;i<n;i++){
p=head;
//定位到第i+1个元素
for(j=0;j<i;j++)
p=p->next;
//一次输出n个数据
for(j=0;j<n;j++){
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
}
}else{
printf("小子!正经点!\n\n");
goto s;
}
return 0;
}
算法复杂度 O(n^2)