繁体   English   中英

N乘N螺旋矩阵(1到平方(N)) - 意外输出

[英]N by N spiral matrix (1 to square(N)) - Unexpected Output

在尝试为数字 1 到 square(N) 创建 N × N 螺旋矩阵时,使用螺旋矩阵的常用算法,即使在重新检查时也无法找到其中一行的意外输出。

def getSpiralOrder(N):
  matrix = [ [ 0 for i in range(N) ] for j in range(N) ]
  c = 1
  rS = 0
  rE = len(matrix) 
  cS = 0
  cE = len(matrix[0]) 
  while(rS < rE and cS < cE):
   for i in range(cS , cE ):
     matrix[rS][i]=c
     c = c + 1
   rS += 1

   for i in range(rS , rE):
     matrix[i][cE - 1]=c
     c = c + 1 
   cE -= 1  
   for i in range(cS , cE):
     matrix[rE - 1][cE - i - 1]=c
     c =c + 1
   rE -= 1  
   for i in range(rS,rE):
     matrix[rE - i ][cS]=c
     c = c + 1
   cS += 1  
  
  return(matrix)

n = int(input())
print(getSpiralOrder(n))

输出应该是: [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16 , 15, 6], [10, 9, 8, 7]]

但是输出是: [[1, 2, 3, 4], [12, 13, 14, 5], [16, 0, 15, 6], [10, 9, 8, 7]]

原来所有行都是正确的,除了第三行。

您的最后两个 for 循环是错误的:

def getSpiralOrder(N):
    matrix = [ [ 0 for i in range(N) ] for j in range(N) ]
    c = 1
    rS = 0
    rE = len(matrix) 
    cS = 0
    cE = len(matrix[0]) 
    while(rS < rE and cS < cE):
        for i in range(cS , cE ):
            matrix[rS][i]=c
            c = c + 1
        rS += 1

        for i in range(rS , rE):
            matrix[i][cE - 1]=c
            c = c + 1 
        cE -= 1  
        # should go from cE - 1 not cE - cS - 1
        for i in range(cE-cS):
            matrix[rE - 1][cE - i - 1]=c
            c =c + 1
        rE -= 1  
        # similar here
        for i in range(rE-rS):
            matrix[rE - i -1][cS]=c
            c = c + 1
        cS += 1  
    return(matrix)

暂无
暂无

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

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