拉丁方阵问题 -- python实现

问题描述

拉丁方阵是一种n×n的方阵,方阵中恰有n种不同的元素,每种元素恰有n个,而且每种元素在一行和一列中 恰好出现一次。著名数学家和物理学家欧拉使用拉丁字母来作为拉丁方阵里元素的符号,拉丁方阵因此而得名。
比如:
1 2 3
2 3 1
3 1 2
问题:怎样构造N阶拉丁方阵?

列表

def solution_list(n):
    for y in range(n):
        for x in range(n):
            num = (y + x) % n + 1
            print(f'{num} ', end='')
        print('\n')

单循环链表

class Node:
    """节点"""

    def __init__(self, value):
        self.data = value
        self.next = None

    def __repr__(self):
        return f'Node: {self.data}'


class CircularLinkedList:
    """单循环链表"""
    def __init__(self):
        self.rear = None    # 尾节点

    def append(self, elem):
        """尾插法"""
        temp = Node(elem)
        if self.rear is None:
            temp.next = temp
            self.rear = temp
        else:
            temp.next = self.rear.next
            self.rear.next = temp
            self.rear = temp


def solution_circular_linked_list(n):
    clist = CircularLinkedList()
    for i in range(1, n + 1):
        clist.append(i)

    cur = clist.rear
    while cur.next is not clist.rear:
        cur = cur.next
        temp = cur
        for _ in range(n):
            print(f'{temp.data} ', end='')
            temp = temp.next
        print('\n')
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 拉丁方阵是一种n×n的方阵,方阵中恰有n种不同的元素,每种元素恰有n个,并且每种元素在一行和一列中 恰好出现一次。...
    chca阅读 1,627评论 0 0
  • 循环链表 对于单链表,由于每个结点只存储了向后的指针,到了尾部标识就停止了向后链的操作。也就是说,按照这样的方式,...
    我可能是个假开发阅读 1,293评论 1 7
  • 问题描述 魔术师利用一副牌中的13张黑牌,预先将他们排好后叠放在一起,牌面朝下,对观众说:“我不看牌,只数数就可以...
    AceKitty阅读 1,183评论 0 0
  • 1)这本书为什么值得看: Python语言描述,如果学的Python用这本书学数据结构更合适 2016年出版,内容...
    孙怀阔阅读 12,654评论 0 15
  • 有人说: 在开始科学思维之前,人们是通过故事解释世界的,故事解释不了的事儿就借助于万能的上帝和神灵,神学比哲学更古...
    小猫咪咪1998阅读 240评论 0 4