八皇后改DFS

来源:互联网 发布:linux系统版本查看命令 编辑:程序博客网 时间:2024/05/29 03:26

逐行判断,在当前行放置皇后之后递归进入下一行

#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;} 
0 0