螺旋矩阵

实现功能:$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;
}


转载于:https://my.oschina.net/feek/blog/66525

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值