八皇后 改(蓝桥杯)

蓝桥杯,算法提高,8皇后·改

  题目如下:

问题描述

  规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大。

输入格式

  一个8*8的棋盘。

输出格式

  所能得到的最大数字和

样例输入

1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
48 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64

样例输出

260

数据规模和约定

 

思路:dfs

import java.util.Scanner;
public class Main {
    public static int count=0;
    static int[] b=new int[9];
    static int[][] a=new int[9][9];
    static int sum=0;
    static int max=0;
    public static boolean check(int n) {
        for(int i=1;i             if(b[i]==b[n]||Math.abs(i-n)==Math.abs(b[i]-b[n])) {
                return false;
            }
        }
        return true;
    }
    public static void dfs(int num) {
        if(num==8) {
            if(sum>max) {
                max=sum;
            }
            return;
        }
        else {
            for(int j=1;j<=8;j++) {
                b[num+1]=j;
                if(check(num+1)) {
                    sum+=a[num+1][j];
                    dfs(num+1);
                    sum-=a[num+1][j];
                }
            }
        }
    }
    public static  void main(String[] args)  {
        // TODO Auto-generated method stub
    Scanner sc=new Scanner(System.in);
    for(int i=1;i<9;i++) {
        for(int j=1;j<9;j++) {
            a[i][j]=sc.nextInt();
        }
    }
    dfs(0);
    System.out.println(max);
    }
}


  

你可能感兴趣的:(八皇后 改(蓝桥杯))