八皇后问题:

来源:互联网 发布:淘宝限时秒杀是真的吗 编辑:程序博客网 时间:2024/06/03 19:58


思路:转自:八皇后
显然,每一行可以而且必须放一个皇后,所以n皇后问题的解可以用一个n元向量X=(x1,x2,…..xn)表示,其中,1≤ i≤ n且1≤ xi≤ n,即第n个皇后放在第i行第xi列上。

由于两个皇后不能放在同一列上,所以,解向量X必须满足的约束条件为:

xi≠ xj;

若两个皇后的摆放位置分别是(i,xi)和(j,xj),在棋盘上斜率为-1的斜线上,满足条件i-j=xi-xj;在棋盘上斜率为1的斜线上,满足条件i+j=xi+xj;

综合两种情况,由于两个皇后不能位于同一斜线上,所以,

解向量X必须满足的约束条件为:

|i-xi|≠ |j-xj|

#include <iostream>#include <cstdio>#include <algorithm>using namespace std;//八皇后问题: 用回溯法解决。static int eight_queue[8]={-1},gCount = 0;void print(){    for(int i=0;i<8;i++)    {        int inner;        for(inner=0; inner < eight_queue[i]; inner++)            cout << "0";        cout << "#";        for(inner=eight_queue[i]+1; inner < 8; inner++)            cout << "0" ;        cout << endl;    }    cout << "=================" << endl;}//判断节点bool judgeTheNode(int i,int Xi)//判断第i行第j列是否符合{    for(int k=0;k<i;k++) //判断前面的行    {        if(eight_queue[k] == Xi) //共列,        return false;        if(abs(i-k) == abs(Xi-eight_queue[k]))//斜率不为+-1;        return false;    }    return true;}void queen(int index){    for(int i=0;i<8;i++)    {        if(judgeTheNode(index,i))        {            eight_queue[index] = i;            if(index == 7)            {                gCount++;                print();                eight_queue[index] =-1;                return;            }            queen(index+1);            eight_queue[index] =-1;        }    }}int main(){    queen(0);    cout << gCount << endl;    return 0;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕3个月血压高怎么办 怀孕3个月血压低怎么办 38周孕妇血压高怎么办 孕前检查后怀孕怎么办 精子a加b成活率底怎么办 怀孕五周孕酮低怎么办 怀孕38天孕酮低怎么办 刚怀孕了孕酮低怎么办 怀孕2个月孕酮低怎么办 怀孕七周孕酮低怎么办 孕前检查孕酮低怎么办 甘油三酯偏高7.2怎么办 入职体检来例假怎么办 6激素检查喝水了怎么办 抽血前吃了东西怎么办 怀孕一个月孕酮低怎么办 怀孕了老是有痰怎么办 孕妇有很多白痰怎么办 血糖高怎么办吃什么好 5年糖尿病血糖高怎么办 血糖高引起的视力模糊怎么办 谷丙转氨酶和谷草转氨酶高怎么办 产检血糖有点高怎么办 孕期餐后血糖高怎么办 怀孕12周血糖高怎么办 怀孕2个月血糖高怎么办 怀孕7个月血糖高怎么办 孕妇7个月血糖高怎么办 空腹血糖6%2e7怎么办 血糖和尿酸都高怎么办 血糖高的孕妇便秘怎么办 血糖低怎么办吃什么好 孕检空腹血糖高怎么办 怀孕4个月血糖高怎么办 怀孕3个月血糖高怎么办 怀孕6个月血糖高怎么办 孕29周血糖高怎么办 餐后血糖偶尔高怎么办 歺后血糖9.8高怎么办 怀孕5个月血糖高怎么办 歺后2小时血糖高怎么办