题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
把 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
就可以算为两种不同的方案。
运行限制
public class main {
static int[] a=new int[]{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
static int[] biaoji=new int[]{0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
static int ans=0;
static int a1=0;
public static void main(String[] args) {
dfs(1);
System.out.println(ans);
}
public static void dfs(int n){
//四行
if(n==4){
a1=a[0]+a[1]+a[2]+a[3];
}
if(n==8&&a1!=a[4]+a[5]+a[6]+a[7]){
return;
}
if(n==12&&a1!=a[8]+a[9]+a[10]+a[11]){
return;
}
if(n==16&&a1!=a[12]+a[13]+a[14]+a[15]){
return;
}
//四列
if(n==13&&a1!=a[0]+a[4]+a[8]+a[12]){
return;
}
if(n==14&&a1!=a[1]+a[5]+a[9]+a[13]){
return;
}
if(n==15&&a1!=a[2]+a[6]+a[10]+a[14]){
return;
}
if(n==16&&a1!=a[3]+a[7]+a[11]+a[15]){
return;
}
//两对角线
if(n==13&&a1!=a[3]+a[6]+a[9]+a[12]){
return;
}
if(n==16&&a1!=a[0]+a[5]+a[10]+a[15]){
return;
}
if(n==16){
ans++;
return;
}
if(a[n]!=0){
dfs(n+1);
}
for(int i=2;i<=16;i++){
if(a[n]==0&&biaoji[i]==0){
a[n]=i;
biaoji[i]=1;
dfs(n+1);
a[n]=0;
biaoji[i]=0;
}
}
}
}
-
- 最大运行时间:1s
- 最大运行内存: 128M