拉丁方阵(英语:Latin square)是一种 n × n 的方阵,在这种 n × n 的方阵里,恰有 n 种不同的元素,每一种不同的元素在同一行或同一列里只出现一次。
1 | 2 | 3 |
2 | 3 | 1 |
3 | 1 | 2 |
第一行顺序打印。以后每行从头节点的下一个元素开始打印,直到最后一个元素开头。
package com.yc.algorithm.List;
/**
* 拉丁方阵
* @author yc
*/
public class Latin {
public static void main(String[] args) {
latin(3);
}
/**
* 初始化循环链表
* @param n
* @return
*/
private static ListNode initListNode(int n) {
ListNode head = new ListNode();
ListNode temp = head;
for (int i = 1; i <= n; i++) {
ListNode node = new ListNode();
node.value = i;
temp.next = node;
temp = node;
}
temp.next = head.next;
return temp.next;
}
/**
* 打印循环链表
* @param head
*/
private static void printListNode(ListNode head) {
ListNode temp = head;
System.out.print(temp.value + " ");
while (head != temp.next) {
temp = temp.next;
System.out.print(temp.value + " ");
}
System.out.println();
}
/**
* 拉丁方阵
* @param n
*/
private static void latin(int n) {
ListNode head = initListNode(n);
ListNode temp = head;
while (head != temp.next) {
printListNode(temp);
temp = temp.next;
}
printListNode(temp);
}
}