UVA167

来源:互联网 发布:java list 泛型 编辑:程序博客网 时间:2024/06/06 06:37

题意:求所放的皇后的位置的和最大

思路;八皇后问题,从第一行开始放皇后,看要放在哪一列,之后递归,回溯,判断与之前所放的皇后是否冲突,如果冲突则不进行这次搜索,跳到下一次

#include<stdio.h> #include<string.h> int arr[8][8], c[8]; int sum;void search(int cur, int d){if (cur == 8){if (d > sum) sum = d;}else for(int i = 0;i < 8; i++) {int ok = 1;c[cur] = i;//尝试把第cur行的皇后放在第i列for(int j = 0;j < cur; j++)//检查是否与之前的皇后冲突if (c[cur] == c[j] || cur - c[cur] == j - c[j] || cur + c[cur] == j + c[j]){ok = 0;break;}if (ok){search(cur + 1, d + arr[cur][i]);}}}int main(){int n;scanf("%d", &n);while (n--) {sum = 0;for(int i = 0;i < 8; i++)for(int j = 0;j < 8; j++)scanf("%d", &arr[i][j]);search(0, 0);printf("%5d\n", sum);}return 0;}