五角填数
如【图1.png】的五星图案节点填上数字:1~12,除去7和11。
要求每条直线上数字和相等。
如图就是恰当的填法。
请你利用计算机搜索所有可能的填法有多少种。
注意:旋转或镜像后相同的算同一种填法。
请提交表示方案数目的整数,不要填写任何其它内容。

代码如下:
1 #include <iostream> 2 using namespace std; 3 4 int star[13]; 5 int flag[13]; 6 int line[6]; 7 8 void dfs(int m){ 9 if(m == 1 || m == 2 || m == 12) { 10 dfs(m + 1); 11 return; 12 } 13 if(m>12){ 14 15 line[0] = star[1] + star[3] + star[6] + star[8]; 16 line[1] = star[1] + star[4] + star[7] + star[11]; 17 line[2] = star[8] + star[9] + star[10] + star[11]; 18 line[3] = star[2] + star[3] + star[4] + star[5]; 19 line[4] = star[2] + star[6] + star[9] + star[12]; 20 line[5] = star[5] + star[7] + star[10] + star[12]; 21 for (int i = 0; i < 5; i++) { 22 if (line[i]!=line[i+1]) 23 return; 24 } 25 cout<<star[6]<<endl; 26 return; 27 28 } 29 for( int i = 1; i <= 12; i++) { 30 if(flag[i] == 0) { 31 flag[i] = 1; 32 star[m] = i; 33 dfs(m + 1); 34 flag[i] = 0; 35 } 36 } 37 38 } 39 int main(){ 40 star[1]=1; 41 star[2]=8; 42 star[12]=3; 43 flag[1]=1; 44 flag[3]=1; 45 flag[8]=1; 46 dfs(1); 47 return 0; 48 }

浙公网安备 33010602011771号