题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
把 1 ~ 16 的数字填入 4×4 的方格中,使得行、列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方。
四阶幻方可能有很多方案。如果固定左上角为 1,请计算一共有多少种方案。
比如:
1 2 15 16
12 14 3 5
13 7 10 4
8 11 6 9
以及:
1 12 13 8
2 14 7 11
15 3 10 6
16 5 4 9
就可以算为两种不同的方案。
思路:
参考代码:
def dfs(n):
global cnt
if n>=4 and m[0]+m[1]+m[2]+m[3]!=34: return
if n>=7 and m[0]+m[4]+m[5]+m[6]!=34: return
if n>=10 and m[1]+m[7]+m[8]+m[9]!=34: return
if n>=11 and m[3]+m[6]+m[8]+m[10]!=34: return
if n>=12 and m[4]+m[7]+m[10]+m[11]!=34: return
if n>=14 and m[5]+m[8]+m[12]+m[13]!=34: return
if n>=15 and m[2]+m[10]+m[12]+m[14]!=34: return
if n>=16 and (m[3]+m[11]+m[13]+m[15]!=34 or m[6]+m[9]+m[14]+m[15]!=34 or m[0]+m[7]+m[12]+m[15]!=34): return
if n==16: cnt+=1
for i in range(2,17):
if vis[i]==0:
m[n]=i
vis[i]=1
dfs(n+1)
vis[i]=0
cnt=0
vis=[0]*17
vis[1]=1
m=[0]*17 #用一维数组表示幻方
m[0]=1 #1 被固定
dfs(1)
print(cnt)
# print(416)