【课件】八皇后问题

来源:互联网 发布:淘宝卖视频 违规 编辑:程序博客网 时间:2024/05/22 00:09

八皇后问题:要在国际象棋棋盘中放八个皇后,使任意两个皇后都不能互相吃。(提示:皇后能吃同一行、同一列、同一对角线的任意棋子。)

#include<cstdio>#include<iostream>#include<cstdlib>#include<iomanip>using namespace std;bool d[100]={0},b[100]={0},c[100]={0};int sum=0,a[100];int print(){    sum++;    cout<<"sum="<<sum<<endl;    for(int i=1;i<=8;i++)    cout<<setw(4)<<a[i];    cout<<endl;}int search(int i){    for(int j=1;j<=8;j++)    if(!b[j]&&!c[i+j]&&!d[i-j+7])//由于C++不能操作负数组,因此考虑加7    {        a[i]=j;//摆放皇后        b[j]=1;//宣布占领第j列        c[i+j]=1;//占领两个对角线        d[i-j+7]=1;        if(i==8) print();//8个皇后都放置好,输出        else search(i+1);//继续递归放置下一个皇后        b[j]=0;//递归返回即为回溯一步,当前皇后退出        c[i+j]=0;        d[i-j+7]=0;    }}int main(){   search(1);//从第1个皇后开始放置   return 0;}