题意:类似于8皇后问题,只不过棋盘上每个格子都有个分数,皇后所在的位置即可以得到的分数。还是8皇后问题的规则,最后求得最大可得到的分数。
思路:8皇后问题解法,在放完8个皇后后判断一下得到的分数就行了。
在 if 语句的判断内容那块竟然还写错一次,不满意~
也可以用vis[3][2*8];数组标记,然后会快一点
Code:
#include<stdio.h> void dfs(int cur,int score); int chess[8][8]; int bestscore; int C[8]; int main() { //freopen("167.in","r",stdin); //freopen("167.out","w",stdout); int k; scanf("%d",&k); while(k-->0) { for(int i=0;i<8;++i) for(int j=0;j<8;++j) { scanf("%d",&chess[i][j]); } bestscore=0; dfs(0,0); printf("%5d\n",bestscore); } return 0; } void dfs(int cur,int score) { if(cur==8) { bestscore=score>bestscore?score:bestscore; } else for(int i=0;i<8;++i)//尝试每一列 { C[cur]=i; int ok=1; for(int j=0;j<cur;++j)//下面if语句中是cur而不是i。。。 if(C[cur]==C[j] || C[cur]+cur==C[j]+j || C[cur]-cur==C[j]-j) { ok=0; break;} if(ok) { dfs(cur+1,score+chess[cur][C[cur]]); } } }
原文地址:http://blog.csdn.net/buxizhizhou530/article/details/44115217