/*標題:五星填數 如【圖1.png】的五星圖案節點填上數字:1~12,除去7和11。 要求每條直線上數字和相等。 如圖就是恰當的填法。 請你利用計算機搜索所 * 有可能的填法有多少種。 注意:旋轉或鏡像後相同的算同一種填法。 請提交表示方案數目的整數,不要填寫任何其它內容。*/ package test; public class 五星填數 { static int count = 0; public static void main(String arg[]) { int[] a = {1,2,3,4,5,6,8,9,10,12}; dfs(0,9,a); System.out.println(count/10); } private static void dfs(int step, int length, int[] a) { // TODO Auto-generated method stub if(step == length) { if(check(a)){ //System.out.println(count); count++; } } else { for(int i = step;i <= length;i++) { swap(i,step,a); dfs(step+1,length,a); swap(i,step,a); } } } private static boolean check(int[] a) { // TODO Auto-generated method stub int temp = a[0]+a[5]+a[6]+a[2]; if(temp != a[2]+a[8]+a[7]+a[4]) return false; if(temp != a[4]+a[5]+a[9]+a[1]) return false; if(temp != a[1]+a[6]+a[7]+a[3]) return false; if(temp != a[3]+a[8]+a[9]+a[0]) return false; return true; } private static void swap(int i, int step,int[] a) { // TODO Auto-generated method stub int temp = a[i]; a[i] = a[step]; a[step] = temp; } }