顺时针打印矩阵

<?php
header("Content-Type:text/html;charset=utf-8");
// 顺时针打印矩阵

// 随机生成数组,a[i,j];
$col = rand ( 0, 10 );
$row = rand ( 0, 10 );

$arr = array ();
for($i = 0; $i < $col; $i ++)
    for($j = 0; $j < $row; $j ++)
        $arr [$i] [] = rand ( 0, 100 );


//输出矩形数组
function getEE($arr) {
    $col = count ( $arr );
    $row = count ( $arr [0] );
    $i=0;
    $j=0;
    for($j=0;$j<$col;$j++){
    for($i=0;$i<$row;$i++){
        echo $arr[$j][$i]."  ";
    }
    echo "<br/>";
    }
}

/*
 * 分析: 由一周为一个轮回。 如果刚好有偶数个周,数组高大于宽,则有$col/2次轮回,若宽大于高则 有$row/2个轮回。 如果未奇数个周,则有$len/2+1个周。
 */
function Printarrayincircle($arr) {
    $col = count ( $arr );
    $row = count ( $arr [0] );
    $len = $col < $row ? $col : $row;
    for($i =0; $i < $len / 2; $i ++) {
        $x=$i+1;
        echo '第'.$x."圈:</br>";
        Printnumberincircle ( $arr, $i );
        
    }
}

/*
 * 一周共有四次判断 Printnumberincircle($start,$end,$direction); 第一次: 第二次: 第三次: 第四次:
 */
function Printnumberincircle($arr, $p) {
    $col = count ( $arr );
    $row = count ( $arr [0] );
    $len = $col < $row ? $col : $row;
    // 第一次:start:$row-$i+1;end:$col-1;
    for($i = 0; $i < $row - 2 * $p; $i ++)
        echo $arr [ $p ] [$p + $i] . " -";
    echo "<br/>";
    
    for($i = 0; $i < $col - 2 * $p - 1; $i ++)
        echo $arr [$p + $i + 1] [$row - $p - 1]. " -";
    echo "<br/>";
    
    if($p==floor($len/2)  )
        break;
    for($i = 0; $i < $row - 2 * $p - 1; $i ++)
        echo $arr [$col - $p - 1] [$row - $i - $p -2]. " -";
    echo "<br/>";
    for($i = 0; $i < $col - 2 * $p - 2; $i ++)
        echo $arr [$col - $i - $p-2] [$p]. " -";
    echo "<br/>";
}

getEE($arr);
echo "<br/>";


Printarrayincircle ( $arr );
?>

代码很难看,不知道为什么,希望高人指点一二。

posted @ 2014-05-09 16:32  UCanBeFree  阅读(197)  评论(0编辑  收藏  举报