什么是螺旋矩阵?螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。下图就是一个螺旋矩阵的示例:郑晓在这里分别使用了python和php来实现了数字的螺旋矩阵。其中的php版本写成了函数,更加灵活的对矩阵进行控制。写python时由于是第一次写,有些生疏,分别用了两种方法来实现。。。下面上代码吧:python螺旋矩阵的第一版(比较难以理解?!):#coding:gbkl = 6 #矩阵大小result = [[0]*l for n in range(l)]row =0 #初始行 从左上角开始col = 0 #初始列 从左上角开始value = 1#初始值direction = 'r' #初始方向 向右circle = 1 #初始圈数 第一圈while true: #向右走 if direction == 'r': result[row][col] = value if col>=l-circle: direction = 'd' continue col += 1 #向下走 if direction =='d': result[row][col] = value if row >= l-circle: direction = 'l' continue row += 1 #向左走 if direction == 'l': result[row][col] = value if col 4: break #打印结果 for y in range(h): for x in range(w): print %3d % (result[(x,y)]), print#调用示例print_matrix(6,6,5,0)raw_input()
下面是php版的螺旋矩阵,思路和上面的python是一样的(其实我是照着写的…)。
/* * * @param $w : 宽 * @param $h : 高 * @param $s : 起始数字 * @param $x, $y : 起始位置坐标 只能从四顶点开始 * @param $r :方向 默认顺时间 false为逆时针 * @author : 郑晓 * php5.6.11 * 这是一个螺旋矩阵的php版本,由于之前在python下写过,有了一些经验,所以在php中也使用了spl的一个迭代器,用于换向。算法编写时是使用的过程式,后来又改为了函数,加入了一些自定义参数,方便调用(然并卵)。输出中使用的是制表和换行符,请在浏览器源代码中查看运行结果。 */function print_matrix($w, $h, $s=1, $l=1, $x=0, $y=0, $r=true) { $r = array(array(1,0), array(0,1), array(-1,0), array(0,-1)); !$r && $r = array_reverse($r); $iterator = new infiniteiterator(new arrayiterator($r)); //创建一个无限迭代器 $iterator->rewind(); //指针指向第一元素 list($_x, $_y) = $iterator->current(); $result = []; $result[$x][$y] = $s; for($i = $s+1; $i < $s+$w * $h; $i++) { $new_x = $x + $_x; $new_y = $y + $_y; if(0<= $new_x && 0<= $new_y && $new_x current(); $i--; } } //以下是打印矩阵结构 for($i=0; $i< $h; $i++) { for($j=0; $j< $w; $j++) { echo $result[$j][$i], \t; } echo \n; }}//调用示例测试print_matrix(5, 5); echo \n;print_matrix(7, 4); echo \n;print_matrix(5, 5, 1, 4, 0); echo \n;print_matrix(5, 5, 10, 0, 4, false); echo \n;
下面是依次的运行结果:
