蓝桥杯 六角形中填置1~12个数字 dfs
如图【1.png】所示六角形中,填入1~12的数字。
使得每条直线上的数字之和都相同。
图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
请通过浏览器提交答案,不要填写多余的内容。
/* *将12个数字放置到12个位置中,深度搜索,暴力枚举的方法 *每放置一个数字,检查之前所放置位置的数字是否出现重复 *当恰好放置12个数字并且六个边的和相同打印出所有的数字 */ #include<stdio.h> #include<string.h> int t[6]; int num[12]; void dfs(int cur){ t[0]=num[1]+num[4]+num[7]+num[9]; t[1]=num[2]+num[5]+num[4]+num[6]; t[2]=num[1]+num[5]+num[8]+num[12]; t[3]=num[6]+num[8]+num[11]+num[3]; t[4]=num[9]+num[10]+num[11]+num[12]; t[5]=num[2]+num[7]+num[10]+num[3]; //恰好放置12个数字,+1为13 if(cur==13){ //六个边的和恰好相同 if(t[0]==t[1] && t[1]==t[2] && t[2]==t[3] && t[3]==t[4] && t[4]==t[5] &&t[5]==t[0]) //打印结果 for(int f=1;f<=12;f++) printf("%d ",num[f]); } //否则继续放置数字,从1开始逐个放置 else for(int i=1;i<=12;i++){ //标记变量 int ok=1; for(int j=1;j<cur;j++){ //检查当前放置的数字是否在此之前放置过 if(num[j]==i) ok=0; //如果放置过标记变量为0 } if(ok){ //放置该数字 num[cur]=i; //进行下一步搜索 dfs(cur+1); } } } int main(){ num[1]=1;num[2]=8;num[3]=3; dfs(4); return 0; }