void a(int i,int g[11],bool k[15])
{
if (i >= 4)
{
if (6 + 11 + g[0] + g[1] != 6 + 14 + g[2] + g[3])
{
return;
}
}
if (i >= 6&&i<8)
{
if (6 + 11 + g[0] + g[1] != g[1] + g[2] + g[4] + g[5])
{
return;
}
}
if (i >= 8&&i<10)
{
if (6 + 11 + g[0] + g[1] != g[3] + g[4] + g[6] + g[7])
{
return;
}
}
if (i >= 10)
{
if (6 + 11 + g[0] + g[1] != g[0] + g[5] + g[8] + g[9])
{
return;
}
}
if (i == 11)
{
if (6 + g[1] + g[0] + 11 == 6 + 14 + g[2] + g[3]
&& 6 + g[1] + g[0] + 11 == g[1] + g[2] + g[4] + g[5]
&& 6 + g[1] + g[0] + 11 == g[3] + g[4] + g[6] + g[7]
&& 6 + g[1] + g[0] + 11 == g[0] + g[5] + g[8] + g[9]
&& 6 + g[1] + g[0] + 11 == 11+g[7]+g[10]+g[8]
&& 6 + g[1] + g[0] + 11==g[6]+g[10]+g[9]+14)
{
cout << g[4] << " " << g[2] << " " << g[1] << " " << g[5];
}
}
for(int t=1;t<14;t++)
{
if (k[t])
{
continue;
}
g[i] = t;
k[t] = 1;
a(i+1, g, k);
k[t] = 0;
}
g[i] = 0;
}
int main()
{
int g[12] = { 0,0,0,0,0,0,0,0,0,0,0 };
bool k[15] = { 0,0,0,0,0,0,1,0,0,0,0,1,0,0,1 };
int i = 0;
int j = 0;
a(0, g, k);
}
简单的递归加上微妙的优化就可以快速的运算出结果。