算法提高 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 数据规模和约定   棋盘上的数字范围0~99

 1 import java.util.ArrayList;
 2 import java.util.Arrays;
 3 import java.util.Collections;
 4 import java.util.List;
 5 import java.util.Scanner;
 6 
 7 public class Main{
 8     static int[][] a;
 9     static boolean[] leftup;
10     static boolean[] leftdown;
11     static boolean[] lie;
12     static int max = 0;
13     public static void main(String[] args) {
14         Scanner input = new Scanner(System.in);
15         a = new int[9][9];
16         leftup = new boolean[16];
17         leftdown = new boolean[16];
18         lie = new boolean[9];
19         for(int i=1;i<=8;i++){
20             for(int j=1;j<=8;j++){
21                 a[i][j] = input.nextInt();
22             }
23         }
24         f(1,0);
25         System.out.println(max);
26     }
27     public static void f(int i,int sum){
28         if(i==9){
29             if(max<sum){
30                 max = sum;
31             }
32             return;
33         }
34         for(int j=1;j<=8;j++){
35             if(!lie[j]&&!leftup[i+j-1]&&!leftdown[j-i+8]){
36                 lie[j] = true;
37                 leftup[i+j-1] = true;
38                 leftdown[j-i+8] = true;
39                 f(i+1,sum+a[i][j]);
40                 lie[j] = false;
41                 leftup[i+j-1] = false;
42                 leftdown[j-i+8] = false;
43             }
44         }
45     }
46 }

 

    原文作者:来一点音乐
    原文地址: https://www.cnblogs.com/lolybj/p/6650862.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞