时间:2021-07-01 10:21:17 帮助过:28人阅读
$a = array('A1', 'A2', 'A3', 'A4', 'A5', 'A6');
berger_method($a);
function berger_method($ar) {
if(count($ar) %2) $ar[] = ' ';
$t = array_merge(range(1, count($ar)-1), range(1, count($ar)-1));
$len = count($ar);
$m = range(1, $len);
$lun = 0;
$last = 0;
$k = $len <= 4 ? 1 : ($len - 4) / 2 + 1;
while($lun++ < $len-1) {
$s = array_values($m);
echo "== $lun ==\n";
for($i=0; $i<$len/2; $i++) printf("%s -- %s\n", $ar[$s[$i]-1], $ar[$s[$len-1-$i]-1]);
echo "\n";
list($m[0], $m[$len-1]) = array($m[$len-1], $m[0]);
for($i=0; $i<$k; $i++) {
if($m[++$last % $len] == $len) $last++;
}
$n = $last %= $len;
for($i=1; $i<$len; $i++) {
if(($m[$n]) == $len) $n = ($n + 1) % $len;
$m[$n] = $i;
$n = ($n + 1) % $len;
}
}
}
== 1 ==这是单循环的
A1 -- A6
A2 -- A5
A3 -- A4
== 2 ==
A6 -- A4
A5 -- A3
A1 -- A2
== 3 ==
A2 -- A6
A3 -- A1
A4 -- A5
== 4 ==
A6 -- A5
A1 -- A4
A2 -- A3
== 5 ==
A3 -- A6
A4 -- A2
A5 -- A1