Title

五角填数

如【图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 }

 

posted @ 2020-09-30 16:11  WAASSTT  阅读(149)  评论(0)    收藏  举报
Title