标签:
标题:六角填数
如图【1.png】所示六角形中,填入1~12的数字。
使得每条直线上的数字之和都相同。
图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
请通过浏览器提交答案,不要填写多余的内容。
简单的枚举排列,只要提前将12个结点标号,来判断六个线段总和是否相等。
代码如下:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define MAXN 13 5 int num[MAXN]; 6 int used[MAXN]; 7 bool flag=false; 8 using namespace std; 9 void dfs(int cur) 10 { 11 int i,j; 12 bool ok; 13 if(cur==13) 14 { 15 if(num[1]+num[4]+num[7]+num[9]==num[2]+num[4]+num[5]+num[6]&&num[2]+num[4]+num[5]+num[6]==num[1]+num[5]+num[8]+num[12]&&num[1]+num[5]+num[8]+num[12]==num[6]+num[8]+num[11]+num[3]&&num[6]+num[8]+num[11]+num[3]==num[2]+num[7]+num[10]+num[3]&&num[2]+num[7]+num[10]+num[3]==num[9]+num[10]+num[11]+num[12]) 16 { 17 for(i=1;i<=12;i++) 18 cout<<num[i]<<endl; 19 flag=true; 20 } 21 } 22 for(i=1;i<=12;i++) 23 { 24 ok=true; 25 for(j=1;j<=cur-1;j++) 26 { 27 if(used[i]||num[j]==i) 28 ok=false; 29 } 30 if(ok) 31 { 32 num[cur]=i; 33 used[i]=1; 34 dfs(cur+1); 35 } 36 if(flag) 37 return; 38 used[i]=0; 39 } 40 } 41 int main() 42 { 43 memset(used,0,sizeof(used)); 44 used[1]=1; 45 used[3]=1; 46 used[8]=1; 47 num[1]=1; 48 num[2]=8; 49 num[3]=3; 50 dfs(4); 51 return 0; 52 }
标签:
原文地址:http://www.cnblogs.com/fancy-itlife/p/4299058.html