zoukankan      html  css  js  c++  java
  • 第六届蓝桥杯 四阶幻方

    转载请注明出处:http://www.cnblogs.com/zhishoumuguinian/p/8395458.html

    把1~16的数字填入4x4的方格中,使得行、列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方。四阶幻方可能有很多方案。如果固定左上角为1,请计算一共有多少种方案。

    比如:            以及:
    1 2 15 16            1 12 13 8
    12 14 3 5            2 14 7 11
    13 7 10 4            15 3 10 6
    8 11  6  9            16 5  4  9

    就可以算为两种不同的方案。请提交左上角固定为1时的所有方案数字,不要填写任何多余内容或说明文字。

    答案:416

     1 #include <iostream>
     2 #include <fstream>
     3 #include <iomanip>
     4 using namespace std;
     5 int a[5][5];
     6 int flag[20]={0};
     7 int ans=0;
     8 bool Check(int x, int y)
     9 {
    10     if(x<3)
    11     {
    12         if(y<3) return true;
    13         if(a[x][0]+a[x][1]+a[x][2]+a[x][3]==34)
    14             return true;
    15         return false;
    16     }
    17     else
    18     {
    19         if(y==0)
    20             if((a[0][0]+a[1][0]+a[2][0]+a[3][0]!=34)||(a[0][3]+a[1][2]+a[2][1]+a[3][0]!=34)) return false;
    21         if(y==1||y==2)
    22             if(a[0][y]+a[1][y]+a[2][y]+a[3][y]!=34) return false;
    23         if(y==3)
    24             if((a[0][y]+a[1][y]+a[2][y]+a[3][y]!=34)||(a[0][0]+a[1][1]+a[2][2]+a[3][3])!=34) return false;
    25         return true;
    26     }
    27 }
    28 
    29 
    30 void dfs(int x, int y)
    31 {
    32     if(x==4)
    33     {
    34         ans++;
    35         return;
    36     }
    37     for(int num=1; num<=16; num++)
    38     {
    39         if(flag[num]==0)
    40         {
    41             a[x][y]=num;
    42             flag[num]=1;
    43             if(Check(x,y))
    44             {
    45                 if(y<3) dfs(x,y+1);
    46                 else dfs(x+1,0);
    47             }
    48             flag[num]=0;
    49         }
    50     }
    51 
    52 
    53 }
    54 
    55 int main()
    56 {
    57     flag[1]=1;
    58     a[0][0]=1;
    59     dfs(0,1);
    60     cout<<ans;
    61 
    62     return 0;
    63 }

     闲的把所有四阶幻方都打印出来了,感兴趣可以看一下《四阶幻方所有可能穷举》。

  • 相关阅读:
    ajax 请求登录超时跳转登录页的示例代码
    [WPF]实现密码框的密码绑定
    Linq系列(5)——表达式树之案例应用
    idea设置内存大小
    idea右下角显示使用内存情况
    idea打开Run Dashboard
    java的byte[]与String相互转换
    java有包名的调用没有包名的类,用反射
    【转】查看电脑显卡型号及显卡性能
    idea关闭sonarLint自动扫描
  • 原文地址:https://www.cnblogs.com/zhishoumuguinian/p/8395458.html
Copyright © 2011-2022 走看看