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]]

原文地址:https://www.cnblogs.com/sea-stream/p/10801367.html

时间: 2024-08-30 09:37:19

python 生成螺旋矩阵的相关文章

leetcode-Spiral Matrix II 螺旋矩阵2之python大法好,四行就搞定,你敢信?

Spiral Matrix II 螺旋矩阵 Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For example,Given n = 3, You should return the following matrix: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 真的不容易..看博客园有人面试碰到过这个问题,长篇

2014螺旋矩阵

题目描述 Description 一个 n 行 n 列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第 1 行第 1 列)出发,初始时向右移动:如果前方是未曾经过的格子, 则继续前进,否则右转:重复上述操作直至经过矩阵中所有格子.根据经过顺序,在格子中 依次填入 1, 2, 3, ... , n2,便构成了一个螺旋矩阵. 下图是一个 n = 4 时的螺旋矩阵. 1  2  3  4 12  13  14  5 11  16  15  6 10  9  8  7 现给出矩阵大小 n 以及 i 和

NOIP2014-普及组复赛-第三题-螺旋矩阵

题目描述 Description 一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵中所有格子.根据经过顺序,在格子中依次填入1, 2, 3, ... , n,便构成了一个螺旋矩阵.2 下图是一个n = 4 时的螺旋矩阵. 1     2     3     4 12    13    14    5 11    16    15    6 10     9     8     7

【LeetCode-面试算法经典-Java实现】【059-Spiral Matrix II(螺旋矩阵II)】

[059-Spiral Matrix II(螺旋矩阵II)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For example, Given n = 3, You should return the following matrix: [ [ 1, 2, 3 ], [ 8,

Python 之 PythonVSMATLAB 矩阵操作

一.线形代数理论基础 线形代数(linear algebra)是数学的一个分支,研究矩阵理论.向量空间.线性变换和有限维线形方程组等内容. 比较重要的思想有:1.线性代数的核心内容是研究有限维线性空间的结构和线性空间的线性变换:2.向量的线性相关性是研究线性空间结构与线性变换理论的基础:3.矩阵是有限维线性空间的线性变换的表示形式:4.线性方程组的求解问题是n维空间到m维空间线性映射求核和全体原象的问题:5.行列式是研究这些问题的一个工具. 主要内容有:1.矩阵运算:加减乘除.转置.逆矩阵.行列

codevs 3093 螺旋矩阵

题目描述 Description 一个 n 行 n 列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第 1 行第 1 列)出发,初始时向右移动:如果前方是未曾经过的格子, 则继续前进,否则右转:重复上述操作直至经过矩阵中所有格子.根据经过顺序,在格子中 依次填入 1, 2, 3, ... , n2,便构成了一个螺旋矩阵. 下图是一个 n = 4 时的螺旋矩阵. 1  2  3  4 12  13  14  5 11  16  15  6 10  9  8  7 现给出矩阵大小 n 以及 i 和

numpy线性代数基础 - Python和MATLAB矩阵处理的不同

http://blog.csdn.net/pipisorry/article/details/39087583 在介绍工具之前先对理论基础进行必要的回顾是很必要的.没有理论的基础,讲再多的应用都是空中楼阁.本文主要设涉及线性代数和矩阵论的基本内容.先回顾这部分理论基础,然后给出MATLAB,继而给出Python的处理.个人感觉,因为Python是面向对象的,操纵起来会更接近人的正常思维:而MATLAB大多是以函数实现的,是向对象施加的一个操作.比如,A是一个矩阵,它有一个属性attr.用Pyth

PHP实现螺旋矩阵(螺旋数组)

今天碰到一个比较有意思的问题, 就是把A到Y这25个字母以下面的形式输出出来 A B C D E P Q R S F O X Y T G N W V U H M L K J I 问题很有意思,就是转圈圈把字母填到表格中,要输出这样的格式,其实就需要构造一个下面这样的表格 1 2 3 4 5 16 17 18 18 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 这其实是一个螺旋矩阵的问题, 这跟下面这个问题本质是一样的: 给定一个行数row和列数cols,

python小白之矩阵matrix笔记(updating)

Matrix #python学习之矩阵matrix 2018.4.18 # -*- coding: UTF-8 -*- from numpy import * import numpy as np import math a=np.matrix('1 2 7;3 4 8;5 6 9')#矩阵的换行必须使用分号隔开,内部数据必须为字符串形式,元素之间必须以空格隔开 print(np.matrix([[1,2],[3,4]])) m=np.asmatrix(a)#将输入的a解释为矩阵m,并修改m中某