蓝桥杯,算法提高,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
---------分割线--------
  此题就比较简单啦,记录当前所有方案之中数字之和最大的那个然后输出就行了,对N后问题有什么疑问的可以去看我的上一篇blog.
 1 #include
 2 int a[8][8];
 3 int vis[3][20]={0};
 4 int t=0;
 5 int x=0;
 6 int s=0;
 7 void dfs(int cur)
 8 {
 9     int i;
10     if(cur==8)
11     {
12         if(s<x)
13             s=x;
14     }
15     else for(i=0;i<8;i++)
16     {
17         if(!vis[0][i]&&!vis[1][cur+i]&&!vis[2][cur-i+8])
18         {
19             vis[0][i]=vis[1][cur+i]=vis[2][cur-i+8]=1;
20             x+=a[cur][i];
21             dfs(cur+1);
22             vis[0][i]=vis[1][cur+i]=vis[2][cur-i+8]=0;
23             x-=a[cur][i];
24         }
25     }
26 }
27 int main()
28 {
29     int i,j,max;
30     for(i=0;i<8;i++)
31         for(j=0;j<8;j++)
32             scanf("%d",&a[i][j]);
33     dfs(0);
34     printf(" %d\n",s);
35     return 0;
36 }

 

转载于:https://www.cnblogs.com/search-the-universe/p/last_month_4.html

你可能感兴趣的:(蓝桥杯,算法提高,8皇后·改)