算法--八皇后问题

来源:互联网 发布:朱炫大师兄 知乎 编辑:程序博客网 时间:2024/06/03 01:28

      在棋盘上放置8个皇后,使得他们不能相互攻击,此时,每个皇后的攻击范围为同行同列和同对角线,要求找出所有解,

回忆之前分析生成排列所用的解答树,我们再把问题简化为四皇后问题,规则不变,写出它的完整解答树

与生成1~n的排列这篇博文中的解答树最大的不同点就是----只有一条或者几条路径可以到达最后一层,而其它的路径在递归时因为条件不满足被回溯了,这也称为回溯法。

本题代码如下:

/*八皇后问题*/#include<cstdio>#include<iostream>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std; const int N=8;int poi[N]={0};int tot=0;int search(int cur){    if(cur==N){        tot++;        printf("第%d个解:\n",tot);         for(int i=0;i<N;i++)printf("(x=%d,y=%d)\n",i,poi[i]);     }    else{        for(int j=0;j<N;j++){            int ok=1;            poi[cur]=j;            for(int k=0;k<cur;k++){                if(poi[cur]==poi[k]||cur-poi[cur]==k-poi[k]||cur+poi[cur]==k+poi[k]){                    ok=0;break;                }            }            if(ok)search(cur+1);        }    }}int main(){    int i,j;    search(0);}


0 0
原创粉丝点击