实现功能:$num=3 $num=4
对应矩阵 : 3 4 5 4 5 6 7
10 11 6 15 16 17 8
9 8 7 14 19 18 9
13 12 11 10
实现原理:通过控制方向状态来实现数据矩阵的构成
function a($num)
{
$arr = array();
/** 构造矩阵地图 **/
for ($i=0; $i<$num; $i++)
{
for ($j=0; $j<$num; $j++)
{
$arr[$i][$j] = 0;
}
}
/* 算出最大的值 */
$sum = $num * $num + $num - 1;
/* 初始化添加的格式 **/
$x_start = $y_start = 0;
/* 初始化方向 ,向东 )*/
$direction = 'e';
for ($i=$num; $i<=$sum; $i++)
{
if($arr[$x_start][$y_start] == 0)//判断当前位置是否被占用
{
$x_tmp = $x_start;
$y_tmp = $y_start;
}
else
{
if($direction == 'e')
{
if($y_start + 1 < $num && $arr[$x_start][$y_start+1] == 0)
{
$y_start++;
}
else
{
$direction = 's';
}
}
if ($direction == 's')
{
if($x_start + 1 < $num && $arr[$x_start + 1][$y_start] == 0)
{
$x_start++;
}
else
{
$direction = 'w';
}
}
if($direction == 'w')
{
if($y_start - 1 >= 0 && $arr[$x_start][$y_start - 1] == 0)
{
$y_start--;
}
else
{
$direction = 'n';
}
}
if($direction == 'n')
{
if($x_start - 1 >= 0 && $arr[$x_start - 1][$y_start] == 0)
{
$x_start--;
}
else
{
$direction = 'e';
if($y_start + 1 < $num && $arr[$x_start][$y_start + 1] == 0)
{
$y_start++;
}
}
}
$x_tmp = $x_start;
$y_tmp = $y_start;
}
$arr[$x_tmp][$y_tmp] = $i;
}
return $arr;
}