七星填数
- 我们可以使用一位数组,用于存放14个数;
- 用一个boolean数组用于确定该数字是否被放进去了
- DFS+回溯 全排列 列举出所有得到可能(除了已经知道的数字)
- 知道符合条件() ```java public class 七星填数 {
static int [] arr = new int[14];
static boolean isb[] = new boolean[15];
public static void main(String[] args) {
arr[0] = 6;
arr[7] = 14;
arr[8] = 11;
isb[6] = isb[14] = isb[11] = true; //
f(0);
}
public static void f(int step){
if(step == 0||step==7||step==8){ //当深搜到已经知道的数字,就跳过
f(step+1);
return;
}
if(step >13){ //在所有的数字都遍历出来时候,进行验算认证
int a1 = arr[1]+arr[2]+arr[3]+arr[4];
int a2 = 6+arr[2]+arr[5]+14;
int a3 = 6+arr[3]+arr[6]+11;//
int a4 = arr[1]+arr[5]+arr[9]+arr[11];//
int a5 = arr[4]+arr[6]+arr[10]+arr[13];
int a6 = 14+arr[9]+arr[12]+arr[13];//
int a7 = 11+arr[11]+arr[12]+arr[10];
if(a1 == a2 && a2 == a3 && a3 == a4 && a4 == a5 && a5 == a6 && a6 == a7){
for (int i : arr) {
System.out.println(i);
}
}
}
//循环回溯
for(int i = 0;i<arr.length;i++){
if(!isb[i+1]){//如果没有被选择过
isb[i+1] = true;
arr[step] = i+1;
f(step+1);
isb[i+1] = false;
}
}
} ```
}