标题:五星填数
如【图1.png】的五星图案节点填上数字:1~12,除去7和11。
要求每条直线上数字和相等。
如图就是恰当的填法。
请你利用计算机搜索所有可能的填法有多少种。
注意:旋转或镜像后相同的算同一种填法。
请提交表示方案数目的整数,不要填写任何其它内容。
先填满再判断和是否相等。。。
#include<stdio.h>
int a[10];
int flag[15];
int sum=0;
int check()
{
int i;
int num[5];
num[0]=a[2]+a[3]+a[4]+a[5];
num[1]=a[1]+a[3]+a[6]+a[9];
num[2]=a[2]+a[6]+a[8]+a[10];
num[3]=a[1]+a[4]+a[7]+a[10];
num[4]=a[5]+a[7]+a[8]+a[9];
for(i=0;i<4;i++)
if(num[i]!=num[i+1])
return 0;
return 1;
}
void dfs(int count)
{
int i;
if(count==11)
{
if(check())
{
sum++;
}
return;
}
for(i=1;i<=12;i++)
{
if(i!=7 && i!=11 && !flag[i])
{
flag[i]=1;
a[count]=i;
dfs(count+1);
flag[i]=0;
}
}
}
int main()
{
dfs(1);
printf("%d\n",sum);
return 0;
}