蓝桥杯官网填空题(反幻方)

文章描述了一个编程问题,通过Java代码实现深度优先搜索(DFS),寻找使用1到9数字填充的三阶反幻方,即每行、每列和对角线数字和均不相等,且旋转或镜像视为同一种。程序统计并输出所有不同的解决方案的数量除以8(因为旋转和镜像算同一种)。
摘要由CSDN通过智能技术生成

我国古籍很早就记载着
2 9 4

7 5 3

6 1 8

这是一个三阶幻方。每行每列以及对角线上的数字相加都相等。
下面考虑一个相反的问题。可不可以用1~9的数字填入九宫格。使得:每行每列每个对角线上的数字和都互不相等呢?
这应该能做到。比如:
9 1 2

8 4 3

7 5 6

你的任务是搜索所有的三阶反幻方。并统计出一共有多少种。旋转或镜像算同一种。
比如:
9 1 2

8 4 3

7 5 6

7 8 9

5 4 1

6 3 2

2 1 9

3 4 8

6 5 7

都算作同一种情况。
请问三阶反幻方一共多少种?
 

import java.util.Scanner;

public class Main {
  static int ans=0;
  static int[] a=new int[9];
  static int[] biaoji=new int[10];
    public static void main(String[] args) {
        dfs(0);
        System.out.println(ans/8);
    }
    public static void dfs(int n){
      if(n==9){
        int a1=a[0]+a[1]+a[2];
        int a2=a[3]+a[4]+a[5];
        int a3=a[6]+a[7]+a[8];
        int a4=a[0]+a[3]+a[6];
        int a5=a[1]+a[4]+a[7];
        int a6=a[2]+a[5]+a[8];
        int a7=a[0]+a[4]+a[8];
        int a8=a[2]+a[4]+a[6];
        if(a1!=a2&&a1!=a3&&a1!=a4&&a1!=a5&&a1!=a6&&a1!=a7&&a1!=a8&&a2!=a3&&a2!=a4&&a2!=a5
        &&a2!=a6&&a2!=a7&&a2!=a8&&a3!=a4&&a3!=a5&&a3!=a6&&a3!=a7&&a3!=a8&&a4!=a5&&a4!=a6
        &&a4!=a7&&a4!=a8&&a5!=a6&&a5!=a7&&a5!=a8&&a6!=a7&&a6!=a8&&a7!=a8){
          ans++;
          return;
        }
        else{
          return;
        }
      }
      if(a[n]!=0){
        dfs(n+1);
      }
      for(int i=1;i<=9;i++){
        if(a[n]==0&&biaoji[i]==0){
          a[n]=i;
          biaoji[i]=1;
          dfs(n+1);
          a[n]=0;
          biaoji[i]=0;
        }
      }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值