繁体   English   中英

在 python 中打印螺旋方阵

[英]Print spiral square matrix in python

这是从内部到外部打印方阵的 python 代码。 如何逆时针从外到内打印

# Function to prints a N x N spiral matrix without using any extra space
# The matrix contains numbers from 1 to N x N
def printSpiralMatrix(N):
 
    for i in range(N):
        for j in range(N):
 
            # x stores the layer in which (i, j)'th element lies
            # find minimum of four inputs
            x = min(min(i, j), min(N - 1 - i, N - 1 - j))
 
            # print upper right half
            if i <= j:
                print((N - 2 * x) * (N - 2 * x) - (i - x) - (j - x), end='')
 
            # print lower left half
            else:
                print((N - 2 * x - 2) * (N - 2 * x - 2) + (i - x) + (j - x), end='')
 
            print('\t', end='')
 
        print()
 
 
if __name__ == '__main__':
 
    N = 4
    printSpiralMatrix(N)

output 应该是这样的

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

试试这个:

def printSpiralMatrix(N):
 
    for i in range(N):
        for j in range(N):
 
            # x stores the layer in which (i, j)'th element lies
            # find minimum of four inputs
            x = min(min(i, j), min(N - 1 - i, N - 1 - j))
 
            # print upper right half
            if i <= j:
                print(abs((N - 2 * x) * (N - 2 * x) - (i - x) - (j - x) -(N**2 + 1)), end='')
 
            # print lower left half
            else:
                print( abs((N - 2 * x - 2) * (N - 2 * x - 2) + (i - x) + (j - x) - (N**2 + 1)), end='')
 
            print('\t', end='')
        print()




printSpiralMatrix(4)

1   2   3   4   
12  13  14  5   
11  16  15  6   
10  9   8   7   
def generateMatrix(n):
        if n<=0:
            return [] 

        matrix=[row[:] for row in [[0]*n]*n]
        
        row_st=0
        row_ed=n-1
        
        col_st=0
        col_ed=n-1
        current=1
        
        while (True):
            if current>n*n:
                break
            for c in range (col_st, col_ed+1):
                matrix[row_st][c]=current
                current+=1
            row_st+=1
            for r in range (row_st, row_ed+1):
                matrix[r][col_ed]=current
                current+=1
            col_ed-=1
            for c in range (col_ed, col_st-1, -1):
                matrix[row_ed][c]=current
                current+=1
            row_ed-=1
            for r in range (row_ed, row_st-1, -1):
                matrix[r][col_st]=current
                current+=1
            col_st+=1
        return matrix

print(list(generateMatrix(3)))

Output

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM