八皇后问题

#include <stdio.h>
#include <stdlib.h>
int count=0;
int a[8];
bool issafe(int x,int y){//x为当前摆放的棋子的横坐标,y为当前摆放的棋子的纵坐标
    bool ret = true;
    for(int i=0;i<x;i++){//这里的i就是摆放好的棋子的位置
        if(x==i||a[i]==y||x-i==y-a[i]||x-i==-y+a[i]){
            ret = false;
            /*break;*/
        }
    }
    return ret;
}

//
void dfs(int step){
    if(step==8){
        count++;//统计一共有多少种解法
        return;
    }
    for(int i =0;i<8;i++){
        if(issafe(step,i)){
                a[step] = i;
                dfs(step+1);
        }
    }

}


int main(){
    dfs(0);
    printf("%d\n",count);
    /*for(int j=0;j<8;j++){
        printf("%d\n",a[j]);
    }*/
    system("pause");
}

迭代变量的选取:

能够唯一描述当前该问题的状态变量

该问题中有两个对应的变量:1.当前摆放到第几行2.摆放的位置

posted @ 2016-12-08 14:48  Pumpkin0227  阅读(115)  评论(0编辑  收藏  举报