如图【1.png】所示六角形中,填入1~12的数字。
使得每条直线上的数字之和都相同。
图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
import java.util.*;
public class Main {
static Scanner in = new Scanner(System.in);
static int n, m;
static boolean[] vis = new boolean[15];
static int[] a = new int[15];
// 2 3 4 5
// 8 9 10 11
// 1 3 6 8
// 1 4 7 11
// 2 6 9 12
// 5 7 10 12
static void dfs(int x){
if(x==1 || x==2 || x==12){
dfs(x+1);
return ;
}
if(x>12) {
int[] b = new int[6];
b[0]=a[1]+a[3]+a[6]+a[8];
b[1]=a[1]+a[4]+a[7]+a[11];
b[2]=a[2]+a[3]+a[4]+a[5];
b[3]=a[2]+a[6]+a[9]+a[12];
b[4]=a[8]+a[9]+a[10]+a[11];
b[5]=a[5]+a[7]+a[10]+a[12];
for(int j=1;j<6;j++)
if(b[j-1]!=b[j])
return ;
System.out.println(a[6]);
return ;
}
for(int i=1;i<=12;i++)
if(!vis[i]) {
vis[i]=true;
a[x]=i;
dfs(x+1);
vis[i]=false;
}
}
public static void main(String[] args) {
Arrays.fill(vis, false);
a[1]=1; vis[1]=true;
a[2]=8; vis[8]=true;
a[12]=3; vis[3]=true;
dfs(1);
}
}
思考:很简单,还是利用深搜去填盒子,只不过有些盒子已经固定值了,那么我们遇到这些盒子跳过就可以了,注意初始化