[英]multiplying a (N,N) matrix with a vector (V), so that the output is of the shape (N,N,V)
[英]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.