五星填数
如【图1.png】的五星图案节点填上数字:1~12,除去7和11。
要求每条直线上数字和相等。
如图就是恰当的填法。
请你利用计算机搜索所有可能的填法有多少种。
注意:旋转或镜像后相同的算同一种填法。
请提交表示方案数目的整数,不要填写任何其它内容。
答案:12
public class Main {
public static int count = 0;
public void swap(int[] A, int i, int j) {
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
public void check(int[] A) {
int sum1 = A[0] + A[2] + A[5] + A[8];
int sum2 = A[0] + A[3] + A[6] + A[9];
int sum3 = A[1] + A[2] + A[3] + A[4];
int sum4 = A[1] + A[5] + A[7] + A[9];
int sum5 = A[4] + A[6] + A[7] + A[8];
if(sum1 == sum2 && sum1 == sum3 && sum1 == sum4 && sum1 == sum5) {
count++;
} else
return;
}
public void dfs(int[] A, int step) {
if(step == A.length) {
check(A);
return;
} else {
for(int i = step;i < A.length;i++) {
swap(A, i, step);
dfs(A, step + 1);
swap(A, i, step);
}
}
}
public static void main(String[] args) {
Main test = new Main();
int[] A = {1,2,3,4,5,6,8,9,10,12};
test.dfs(A, 0);
System.out.println(count / 10);
}
}