【算法题】螺旋矩阵II (求解n阶Z形矩阵)

一、问题的提出

nZ形矩阵的特点是按照之(Z)字形的方式排列元素。nZ形矩阵是指矩阵的大小为n×n,其中n为正整数。

题目描述

一个 n 行 n 列的螺旋(Z形)矩阵如图1所示,观察并找出填数规律。

【算法题】螺旋矩阵II (求解n阶Z形矩阵)_第1张图片

图1  7行7列和8行8列的螺旋(Z形)矩阵

现在给出矩阵大小 n,请你输出该矩阵。

输入格式

输入一个整数 n(1n1000),表示矩阵大小。

输出格式

输出 n  n 列,表示所求的矩阵。

输入输出样例

【算法题】螺旋矩阵II (求解n阶Z形矩阵)_第2张图片

二、解决的思路

【算法题】螺旋矩阵II (求解n阶Z形矩阵)_第3张图片

图2 矩阵生成原理图

根据题目描述、样例和图2可知:矩阵为n×n,其中偶数行(第一行为0)从左向右排列元素;奇数行(第一行为0)从右向左排列元素。

三、矩阵生成算法

nn列,偶数行(第一行为0)0~n-1生成元素;奇数行(第一行为0)n-1~0生成元素。

程序代码如下:

N = 5
def prt(b):                           # 打印二维列表
    for i in range(N):
        for j in range(N):
            print("%3d" % b[i][j], end='')
        print()

def Helix_MatrixII(n):
    cnt = 1
    for i in range(n):                # 生成n行
        if i % 2 == 0:                # 偶数行
            for j in range(n):        # 由左向右(j为0~n-1)生成
                matrix[i][j] = cnt
                cnt += 1
        else:                         # 奇数行
            for j in range(n):        # 由右向左(j为n-1~0)生成
                matrix[i][n-1-j] = cnt
                cnt += 1

matrix = []                           # 初始化二维矩阵matrix(二维列表)
for i in range(N):
    matrix.append([])
    for j in range(N):
        matrix[i].append(0)
Helix_MatrixII(N)
prt(matrix)

执行结果:

1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25

四、题目求解算法

按题目要求:输入矩阵大小 n,输出该矩阵。

def prt(b):                           # 打印二维列表
    for i in range(N):
        for j in range(N):
            print("%3d" % b[i][j], end='')
        print()

def Helix_MatrixII(n):
    cnt = 1
    for i in range(n):                # 生成n行
        if i % 2 == 0:                # 偶数行
            for j in range(n):        # 由左向右(0~n-1)生成
                matrix[i][j] = cnt
                cnt += 1
        else:                   # 奇数行
            for j in range(n):        # 由左向右(n-1~0)生成
                matrix[i][n-1-j] = cnt
                cnt += 1

N = int(input())
matrix = []                           # 初始化二维矩阵matrix(二维列表)
for i in range(N):
    matrix.append([])
    for j in range(N):
        matrix[i].append(0)
Helix_MatrixII(N)
prt(matrix)

输入8,输出为

【算法题】螺旋矩阵II (求解n阶Z形矩阵)_第4张图片

你可能感兴趣的:(算法,矩阵,线性代数,python,经验分享)