暴力:
#include "cstdio" #include "cstring" #include "iostream" #include "algorithm" using namespace std; int main (){ int a[13]; for(int i=0;i<12;++i) a[i]=i+1; while(next_permutation(a,a+12)){ int t=a[1]+a[2]+a[3]+a[4]; if(a[0]==1 && a[1]==8 && a[11]==3 && t==a[0]+a[2]+a[5]+a[7] && t==a[0]+a[3]+a[6]+a[10] && t==a[7]+a[8]+a[9]+a[10] && (a[1]+a[5]+a[8]+a[11])==(a[4]+a[6]+a[9]+a[11])) printf("%d ",a[5]); } return 0; }
dfs:
#include <cstdio> #include <cstring> int a[12]; bool vis[13]; void dfs(int k){ int i; int t=a[1]+a[2]+a[3]+a[4]; if(k==12 && a[0]==1 && a[1]==8 && a[11]==3 && t==a[0]+a[2]+a[5]+a[7] && t==a[0]+a[3]+a[6]+a[10] && t==a[1]+a[5]+a[8]+a[11] && t==a[4]+a[6]+a[9]+a[11] && t==a[7]+a[8]+a[9]+a[10] && a[7]+a[8]+a[9]+a[10]==a[0]+a[3]+a[6]+a[10]){ printf("%d ",a[5]); return ; } for(i=1;i<=12;++i){ if(!vis[i]){ vis[i]=1; a[k]=i; dfs(k+1); vis[i]=0; a[k]=0; } } } int main (){ memset(vis,0,sizeof(vis)); memset(a,0,sizeof(a)); dfs(0); return 0; }