我国古籍很早就记载着
2 9 4
7 5 3
6 1 8
这是一个三阶幻方。每行每列以及对角线上的数字相加都相等。
下面考虑一个相反的问题。可不可以用1~9的数字填入九宫格。使得:每行每列每个对角线上的数字和都互不相等呢?
这应该能做到。比如:
9 1 2
8 4 3
7 5 6
你的任务是搜索所有的三阶反幻方。并统计出一共有多少种。旋转或镜像算同一种。
比如:
9 1 2
8 4 3
7 5 6
7 8 9
5 4 1
6 3 2
2 1 9
3 4 8
6 5 7
都算作同一种情况。
请问三阶反幻方一共多少种?
import java.util.Scanner;
public class Main {
static int ans=0;
static int[] a=new int[9];
static int[] biaoji=new int[10];
public static void main(String[] args) {
dfs(0);
System.out.println(ans/8);
}
public static void dfs(int n){
if(n==9){
int a1=a[0]+a[1]+a[2];
int a2=a[3]+a[4]+a[5];
int a3=a[6]+a[7]+a[8];
int a4=a[0]+a[3]+a[6];
int a5=a[1]+a[4]+a[7];
int a6=a[2]+a[5]+a[8];
int a7=a[0]+a[4]+a[8];
int a8=a[2]+a[4]+a[6];
if(a1!=a2&&a1!=a3&&a1!=a4&&a1!=a5&&a1!=a6&&a1!=a7&&a1!=a8&&a2!=a3&&a2!=a4&&a2!=a5
&&a2!=a6&&a2!=a7&&a2!=a8&&a3!=a4&&a3!=a5&&a3!=a6&&a3!=a7&&a3!=a8&&a4!=a5&&a4!=a6
&&a4!=a7&&a4!=a8&&a5!=a6&&a5!=a7&&a5!=a8&&a6!=a7&&a6!=a8&&a7!=a8){
ans++;
return;
}
else{
return;
}
}
if(a[n]!=0){
dfs(n+1);
}
for(int i=1;i<=9;i++){
if(a[n]==0&&biaoji[i]==0){
a[n]=i;
biaoji[i]=1;
dfs(n+1);
a[n]=0;
biaoji[i]=0;
}
}
}
}