如【图1.png】的五星图案节点填上数字:1~12,除去7和11。
要求每条直线上数字和相等。
如图就是恰当的填法。
请你利用计算机搜索所有可能的填法有多少种。
注意:旋转或镜像后相同的算同一种填法。
请提交表示方案数目的整数,不要填写任何其它内容。
答案:
代码:
#include <iostream> using namespace std; int to[10][2] = {0,1,1,2,2,3,3,4,4,0,0,2,1,3,2,4,3,0,4,1}; bool vis[10]; int va[10] = {1,2,3,4,5,6,8,9,10,12}; int sum[5]; int c; void dfs(int k) { if(k >= 10) { c ++; return; } for(int i = 0;i < 10;i ++) { if(vis[i] || sum[to[k][0]] + va[i] > 24 || sum[to[k][1]] + va[i] > 24) continue; sum[to[k][0]] += va[i]; sum[to[k][1]] += va[i]; vis[i] = true; dfs(k + 1); vis[i] = false; sum[to[k][0]] -= va[i]; sum[to[k][1]] -= va[i]; } } int main() { dfs(0); printf("%d",c / 10); }