算法提高 8皇后·改

来源:互联网 发布:车道识别算法 编辑:程序博客网 时间:2024/04/29 06:23

问题描述
  规则同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
思路:
经典八皇后,8个位置和的最大值
代码:
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int a[8],map[8][8],M=-999;int check(int x){int i;for (i=0; i<x; i++){if (a[i] == a[x])return 0;else if (a[x] - a[i] == x - i)return 0;else if (a[x] - a[i] == i - x)return 0;}return 1;}void dfs(int x,int sum){int i,j,k;if (x == 8){if (sum > M){M = sum;}return ;}for (i=0; i<8; i++){a[x] = i;if (check(x)){dfs(x+1,sum+map[x][i]);}}}int main(){int i,j;/*FILE *fp = NULL;fp = fopen("c://lanqiao.txt","r");for (i=0; i<8; i++)for (j=0; j<8; j++){fscanf(fp,"%d",&map[i][j]);}fclose(fp);*/for (i=0; i<8; i++){for (j=0; j<8; j++)scanf("%d",&map[i][j]);}dfs(0,0);cout<<M<<endl;return 0;}


0 0
原创粉丝点击