• 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]]
  • 相关阅读:
    Jzoj3895 数字对
    Jzoj3895 数字对
    Jzoj3894 改造二叉树
    Jzoj3894 改造二叉树
    Jzoj3883 线段树
    Jzoj3883 线段树
    Jzoj3882 近邻
    Jzoj3882 近邻
    第三十一天 how can I 坚持
    第三十天 how can I 坚持
  • 原文地址:https://www.cnblogs.com/sea-stream/p/10801367.html
Copyright © 2020-2023  润新知