蓝桥杯 六角形中填置1~12个数字 dfs

时间:2024-01-07 10:14:44

如图【1.png】所示六角形中,填入1~12的数字。

蓝桥杯  六角形中填置1~12个数字 dfs

使得每条直线上的数字之和都相同。

图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?

请通过浏览器提交答案,不要填写多余的内容。

/*
*将12个数字放置到12个位置中,深度搜索,暴力枚举的方法
*每放置一个数字,检查之前所放置位置的数字是否出现重复
*当恰好放置12个数字并且六个边的和相同打印出所有的数字
*/
#include<stdio.h>
#include<string.h>
int t[];
int num[];
void dfs(int cur){
t[]=num[]+num[]+num[]+num[];
t[]=num[]+num[]+num[]+num[];
t[]=num[]+num[]+num[]+num[];
t[]=num[]+num[]+num[]+num[];
t[]=num[]+num[]+num[]+num[];
t[]=num[]+num[]+num[]+num[];
//恰好放置12个数字,+1为13
if(cur==){
//六个边的和恰好相同
if(t[]==t[] && t[]==t[] && t[]==t[] && t[]==t[] && t[]==t[] &&t[]==t[])
//打印结果
for(int f=;f<=;f++)
printf("%d ",num[f]);
}
//否则继续放置数字,从1开始逐个放置
else for(int i=;i<=;i++){
//标记变量
int ok=;
for(int j=;j<cur;j++){
//检查当前放置的数字是否在此之前放置过
if(num[j]==i)
ok=; //如果放置过标记变量为0
}
if(ok){
//放置该数字
num[cur]=i;
//进行下一步搜索
dfs(cur+);
}
}
}
int main(){
num[]=;num[]=;num[]=;
dfs();
return ;
}