螺旋矩阵算法

幽星人
幽星人 2017-08-28 13:18:46
来源:爱提网

螺旋矩阵算法

$x = $y = 0;
$start = 1;
$n = 5;

SetMatrix($matrix, $x, $y, $start, $n);

for ($i = 0; $i < $n; $i++) {
for ($j = 0; $j < $n; $j++) {
printf("%4d", $matrix[$i][$j]);
}
echo "\n";
}

exit;

/**
* @param $matrix 矩阵
* @param $x 第一个元素的坐标x
* @param $y 第一个元素的坐标y
* @param $start 第一个元素的值
* @param $n 矩阵的大小
*/
function SetMatrix(&$matrix, $x, $y, $start, $n) {
$i = $j = 0;
if ($n <= 0) {
return;
}

if ($n == 1) {
$matrix[$x][$y] = $start;
return;
}

//up
for ($i = $x; $i < $x + $n - 1; $i++) {
$matrix[$y][$i] = $start++;
}

//right
for ($j = $y; $j < $y + $n - 1; $j++) {
$matrix[$j][$x + $n - 1] = $start++;
}

//bottom
for ($i = $x + $n - 1; $i > $x; $i--) {
$matrix[$y + $n - 1][$i] = $start++;
}

//left
for ($j = $y + $n - 1; $j > $y; $j--) {
$matrix[$j][$x] = $start++;
}

SetMatrix($matrix, $x + 1, $y + 1, $start, $n - 2);
}
标签: 螺旋矩阵 算法