当前位置:C++技术网 > 资讯 > 有趣的数据结构小程序--拉丁方阵问题

有趣的数据结构小程序--拉丁方阵问题

更新时间:2015-12-13 20:10:49浏览次数:1+次

BB那么久,可能连题目都看不懂,没事,我们列下3 x 3,4 x 4,5 x 5的拉丁方阵给大家体验下

大家就知道了!

拉丁方阵图例子图:


不知道你发现这样一个规律没?

比如3 x 3的拉丁方阵,第一行是1,2,3,第二行好像都向前移了一位,然后第一个元素跑到了最后面…

用循环链表不就刚好么?非常简单,下面撸下代码~

#include <stdio.h>
#include <stdlib.h>


typedef struct LNode
{
    int data;         
    struct LNode  *next;   
}LNode;  
typedef struct LNode *LinkList; 

//定义一个初始化链表的方法
LinkList ListCreate(int n)
{
    LinkList head = NULL,p,q = head;
    int i;
    for(i = 1;i <= n;i++)
    {
        p = (LinkList)malloc(sizeof(LNode));
        p ->data = i;
        if(head == NULL)head = p;
        else q ->next = p;
        q = p;
    }
    q ->next = head;
    return head;
} 

int main()
{
    LinkList p,q;
    int i,num = 0;
    printf("请输入您要构建的拉丁方针的规模(比如3*3,输入3即可)\n");
    scanf("%d",&num);
    p = ListCreate(num);
    printf("%d * %d 的拉丁方阵构建完毕,输出结果:\n\n",num,num);
    for(i = 0;i < num;i++)
    {
        q = p;
        while(1)
        {
            printf("%d  ",p ->data);
            p = p ->next;
            if(p == q)break;  //已经走完一轮了 
        }
        p = p ->next; 
        printf("\n");
    }
    printf("拉丁方阵打印完毕~~\n\n");
    return 0;
}