可视化讲解:什么是拉丁方阵问题?
前言
概念介绍
1. 基本概念
- 拉丁方阵(英语:Latin square)是一种 n × n 的方阵,在这种 n × n 的方阵里,恰有 n 种不同的元素,每一种不同的元素在同一行或同一列里只出现一次。(注:来源百度百科)
2.相关历史
- 据说普鲁士的腓特列大帝曾组成一支仪仗队,仪仗队共有36名军官,来自6支部队,每支部队中,上校、中校、少校、上尉、中尉、少尉各一名。他希望这36名军官排成6×6的方阵,方阵的每一行,每一列的6名军官来自不同的部队并且军衔各不相同。令他恼火的是,无论怎么绞尽脑汁也排不成。
- 后来,他去求教瑞士著名的大数学家欧拉。欧拉发现这是一个不可能完成的任务。
- 来自n个部队的n种军衔的n×n名军官,如果能排成一个正方形,每一行,每一列的n名军官来自不同的部队并且军衔各不相同,那么就称这个方阵叫正交拉丁方阵。欧拉猜测在
n=2,6,10,14,18,…
时,正交拉丁方阵不存在。 - 然而到了上世纪60年代,人们用计算机造出了n=10的正交拉丁方阵,推翻了欧拉的猜测。现已经知道,除了n=2,6以外,其余的正交拉丁方阵都存在,而且有多种构造的方法。
原理讲解
-
我们以n=4时,n×n拉丁方阵如下图所示
-
可以看到1, 2, 3, 4这4个数每行每列都有,任意一行一列没有重复的数字.
-
下面我们就来详细讲解4×4拉丁方阵的实现原理
- 第一次,我们将数字1,2,3,4按顺序排列在第一排,此时效果如下图
- 第二次,我们将数字1,2,3,4循环向右移动一位变为2,3,4,1,然后将其按顺序排列在第二排,此时效果如下图
- 第三次我们将数字2,3,4,1循环向右移动一位变为3,4,1,2,然后将其按顺序排列在第三排,此时效果如下图
- 第四次,我们将数字3,4,1,2循环向右移动一位变为4,1,2,3,然后将其按顺序排列在第四排,此时效果如下图
- 至此,4×4的拉丁方阵实现完毕。想必聪明的你已经想到了拉丁方阵是用单循环链表实现的了。
效果展示
更多算法学习请关注我的公众号
说明
- 在公众号中回复“算法源码”即可获取十大经典算法源码
- 在公众号中回复“算法书籍”即可获取经典入门算法书籍
- 在公众号中回复“数据结构”即可获取数据结构相关源码