我有一些代码可以确定 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]] 等等等等。