python 生成螺旋矩阵

Posted sea-stream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 生成螺旋矩阵相关的知识,希望对你有一定的参考价值。

 

对于任意 m*n 矩阵,将 1~m*n 的数字按照螺旋规则在矩阵中排列。

如 m=3,n=3,期望结果为:

[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]

以下代码支持方阵以及非方阵。

code:

# coding=utf-8
import numpy

flag=1
pos_x=0
pos_y=0
def inc(pos_x,pos_y,row,col):
    if(-1<pos_x<row and -1<pos_y<col):
        return True
    else:
        return False
def gen(row,col):
    global flag
    global pos_x
    global pos_y
    rowbox=[]
    for i in range(col):
        rowbox.append(0)
    data=[]
    for i in range(row):
        data.append(rowbox)
    x = numpy.array(data)
    for i in range(1,row*col+1):
        while(1):
            if(flag==1):
                if(inc(pos_x,pos_y,row,col) and x[pos_x][pos_y]==0):
                    x[pos_x][pos_y]=i
                    pos_y=pos_y+1
                    break
                else:
                    pos_y=pos_y-1
                    pos_x=pos_x+1
                    flag=2
            if(flag==2):
                if(inc(pos_x,pos_y,row,col) and x[pos_x][pos_y]==0):
                    x[pos_x][pos_y]=i
                    pos_x=pos_x+1
                    break
                else:
                    pos_x=pos_x-1
                    pos_y=pos_y-1
                    flag=3
            if(flag==3):
                if(inc(pos_x,pos_y,row,col) and x[pos_x][pos_y]==0):
                    x[pos_x][pos_y]=i
                    pos_y=pos_y-1
                    break
                else:
                    pos_y=pos_y+1
                    pos_x=pos_x-1
                    flag=4
            if(flag==4):
                if(inc(pos_x,pos_y,row,col) and x[pos_x][pos_y]==0):
                    x[pos_x][pos_y]=i
                    pos_x=pos_x-1
                    break
                else:
                    pos_y=pos_y+1
                    pos_x=pos_x+1
                    flag=1
    return x


# m*n Matrix
m=3
n=6
print(gen(m,n))

输出

[[ 1  2  3  4  5  6]
 [14 15 16 17 18  7]
 [13 12 11 10  9  8]]

 

以上是关于python 生成螺旋矩阵的主要内容,如果未能解决你的问题,请参考以下文章

Python数据结构:BF算法匹配括号回文链表生成螺旋矩阵移除列表元素计算后缀表达式的值顺时针旋转n维矩阵90度折半查找

59. 螺旋矩阵 II

LeetCode:螺旋矩阵||59

Python描述 LeetCode 54. 螺旋矩阵

c_cpp [螺旋矩阵II]:给定整数n,生成以螺旋顺序填充1到n2的元素的方阵。例如,给定n =

59. 螺旋矩阵 II