逐行判断,在当前行放置皇后之后递归进入下一行
#include<stdio.h>
int queen[9]={0};
int count=1;
int base[8][8];
int max=0;
int abs(int i){
if(i<0) return -i;
}
//输出最大解
int visit(){
int i,sum=0;
for(i=1;i<9;i++){
sum+=base[i-1][queen[i]-1];
}
if(max<sum) max=sum;
}
//判断第i行,第j列能否放置皇后
int judege(int i,int j){
int k;//k为当前判断行数
//从第1到第i-1行判断
for(k=1;k<i;k++){
if(queen[k]==j||//列
(abs(k-i)==abs(queen[k]-j))) {//对角线
return 0;
}
}
return 1;
}
//寻找第i行上合适的位置
void search(int i){
//递归终点
if(i>8){
visit();
}
else{
int j;
for(j=1;j<=8;j++){
//在第i行的第j列找到合适的位置
if(judege(i,j)){
queen[i]=j;//占用该列
search(i+1);//寻找下一行
}
}
}
}
int main(){
int i,j;
for(i=0;i<8;i++){
for(j=0;j<8;j++){
scanf("%d",&base[i][j]);
}
}
search(1);
printf("%d",max);
return 0;
}