我有一些代码可以确定一个N*N整数列表是否构成一个幻方:
import itertools
#Function square magic
def magic_square(matrix):
dimension = len(matrix[0])
sum_list = []
#Horizontal code:
sum_list.extend([sum (lines) for lines in matrix])
#Vertical code:
for col in range(dimension):
sum_list.append(sum(row[col] for row in matrix))
#Diagonals code
diagonal1 = 0
for i in range(0,dimension):
diagonal1 +=matrix[i][i]
sum_list.append(diagonal1)
diagonal2 = 0
for i in range(dimension-1,-1,-1):
diagonal2 +=matrix[i][i]
sum_list.append(diagonal2)
if len(set(sum_list))>1:
return False
return True
m=[[7, 12, 1, 14], [2, 13, 8, 11], [16, 3, 10, 5], [9, 6, 15, 4]]
print(magic_square(m))
m=[[2, 7, 6], [9, 5, 1], [4, 3, 8]]
print(magic_square(m))
m=[[2, 7, 6], [9, 5, 1], [4, 3, 7]]
print(magic_square(m))
print("**************************")
#Now, i use itertools like this:
for i in itertools.combinations(range(1,10), 3):
if sum(i) == 15:
print (i)
# I get the combinations each of three numbers with sum 15
我的问题是最后一部分:我想生成整数1到N^2的所有排列,将每个排列分成一个正方形--一个由N行和N列组成的二维列表--并使用我的函数找到所有幻方。我写的itertools代码可以找到3个数字的组合,但我找不到组成正方形的组合。
感谢@Prune的帮助。
如果我有:
1 5 9
1 6 8
2 4 9
2 5 8
2 6 7
3 4 8
3 5 7
4 5 6
我如何一次使用三个矩阵元素,生成一个平方魔术,并知道它是否是真是假?
示例:
[1 5 9,1 6 8,2 4 9]
或
[1 5 9,1 6 8,2 5 8]
或
[1 5 9,1 6 8,2 6 9]等,等。
https://stackoverflow.com/questions/41368021
复制相似问题