题目描述:
把1~16的数字填入4x4的方格中,使得行、列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方。
四阶幻方可能有很多方案。如果固定左上角为1,请计算一共有多少种方案。
比如:
1 2 15 16
12 14 3 5
13 7 10 4
8 11 6 9
以及:
1 12 13 8
2 14 7 11
15 3 10 6
16 5 4 9
就可以算为两种不同的方案。
输出格式:
请提交左上角固定为1时的所有方案数字
分析:
本以为本题可以采用全排列方式轻松解决,写完后发现半天无法出来运行结果,原来是16个数的全排列太大了(大概最大只能计算到11个数的全排列),next_permutation函数行不通了!
#include <bits/stdc++.h>
using namespace std;
int A[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int c = 0,flag = 1;
int main()
{
do{
for(int i = 0;i < 4;i++)
{
if(A[0] == 1)
{
//行之和
for(int j = 0;j <= 12;j+=4)
{
if(A[i+j]&