vua167 - The Sultan's Successors
很简单的八皇后题目。
单纯递归筛选。。。。
分别用y-x, x+y,来标识对角线,这在刘汝佳书上都有讲的。
代码如下:
#include <cstdio> int chess[8][8], lu_to_rd[14], ru_to_ld[14], l[8], max; //lu_to_rd 表示主对角线(left&up to right&down) //同理,ru_to_ld标识副对角线 void dfs(int cur, int sum) { if(cur==8) { max = max < sum ? sum : max ; return; } for(int i = 0; i < 8; i++) { if(!l[i]&&!lu_to_rd[i-cur+7]&&!ru_to_ld[i+cur]) { l[i] = lu_to_rd[i-cur+7] = ru_to_ld[i+cur] = 1; dfs(cur+1,sum+chess[cur][i]); l[i] = lu_to_rd[i-cur+7] = ru_to_ld[i+cur] = 0; } } } int main () { int k; scanf("%d",&k); while(k--) { for(int i = 0; i < 8; i++) for(int j = 0; j < 8; j++) scanf("%d",&chess[i][j]); max = -1; dfs(0, 0); printf("%5d\n",max); } }