七星填数
如图【图1.png】所示。
在七角星的14个节点上填入1~14 的数字,不重复,不遗漏。
要求每条直线上的四个数字之和必须相等。
图中已经给出了3个数字。
请计算其它位置要填充的数字,答案唯一。
填好后,请提交绿色节点的4个数字(从左到右,用空格分开)
比如:12 5 4 8
当然,这不是正确的答案。
注意:只提交4个用空格分开的数字,不要填写任何多余的内容。
public class _1_2 {
// 定义1-14是否被访问
static int[] vis = new int[15];
// 1-14的数据
static int[] a = new int[15];
static int b1, b2, b3, b4, b5, b6, b7;
// dsf深搜
public static void dfs(int step) {
if (step == 1 || step == 8 || step == 9) {
// 已经有值,下一步搜索
dfs(step + 1);
return;
}
if (step > 14) {
b1 = 6 + a[3] + a[6] + 14;
b2 = a[2] + a[3] + a[4] + a[5];
b3 = 6 + a[4] + a[7] + 11;
b4 = a[2] + a[6] + a[10] + a[13];
b5 = a[5] + a[7] + a[11] + a[14];
b6 = 14 + a[10] + a[12] + a[14];
b7 = 11 + a[11] + a[12] + a[13];
if (b1 == b2 && b2 == b3 && b3 == b4 && b4 == b5 && b5 == b6 && b6 == b7) {
for (int i = 0; i < 15; i++) {
System.out.print(a[i] + "-");
}
}
}
// 没有被访问
for (int i = 1; i < 15; i++) {
if (vis[i] == 0) {
vis[i] = 1;
a[step] = i;
dfs(step + 1);
vis[i] = 0;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
vis[6] = vis[14] = vis[11] = 1;
a[1] = 6;
a[8] = 14;
a[9] = 11;
dfs(1);
}
}