拉丁方陣是一種n×n的方陣范嘱,方陣中恰有n種不同的元素茎芭,每種元素恰有n個(gè),并且每種元素在一行和一列中 恰好出現(xiàn)一次纸兔。著名數(shù)學(xué)家和物理學(xué)家歐拉使用拉丁字母來作為拉丁方陣?yán)镌氐姆?hào),拉丁方陣因此而得名否副。
百度百科
的解釋:
來自n個(gè)部隊(duì)的n種軍銜的n×n名軍官汉矿,如果能排成一個(gè)正方形,每一行副编,每一列的n名軍官來自不同的部隊(duì)并且軍銜各不相同负甸,那么就稱這個(gè)方陣叫正交拉丁方陣。歐拉猜測在
n=2痹届,6呻待,10,14队腐,18蚕捉,…
時(shí),正交拉丁方陣不存在柴淘。然而到了上世紀(jì)60年代迫淹,人們用計(jì)算機(jī)造出了n=10的正交拉丁方陣,推翻了歐拉的猜測∥希現(xiàn)在已經(jīng)知道敛熬,除了n=2,6以外第股,其余的正交拉丁方陣都存在应民,而且有多種構(gòu)造的方法。
php的實(shí)現(xiàn)方法
function latin($a, $m){
$r = array();
$n = count($a);
if ($m <= 0 || $m > $n) {
return $r;
}
for ($i=0; $i<$n; $i++) {
$b = $a;
$t = array_splice($b, $i, 1);
if ($m == 1) {
$r[] = $t;
} else {
$c = latin($b, $m-1);
foreach ($c as $v) {
$r[] = array_merge($t, $v);
}
}
}
return $r;
}
function test(){
echo '<pre>';
$data = array('a','b','c');
$res = latin($data, count($data));
print_r($res);
}
test();