标签:
翻译请戳 http://luckycat.kshs.kh.edu.tw/
解题思路
就是8皇后加上最小值。
还是回溯。
代码
#include<stdio.h> #include<string.h> const int maxLen = 20; int val[maxLen][maxLen]; bool visit[2][maxLen]; int maxval; void Search(int cur, int sum) { if(cur==8 && sum>maxval) { maxval = sum; return ; } for(int i=0; i<8; i++) { if(!visit[0][i] && !visit[1][cur+i] && !visit[2][cur-i+8]) { int mid = sum; mid += val[cur][i]; visit[0][i] = visit[1][cur+i] = visit[2][cur-i+8] = true; Search(cur+1, mid); visit[0][i] = visit[1][cur+i] = visit[2][cur-i+8] = false; } } } int main() { int n; scanf("%d", &n); while(n--) { for(int i=0; i<8; i++) for(int j=0; j<8; j++) { scanf("%d", &val[i][j]); } Search(0, 0); printf("%5d\n", maxval); maxval = 0; memset(visit, 0, sizeof(visit)); } return 0; }
标签:
原文地址:http://www.cnblogs.com/ZengWangli/p/5766224.html