八皇后问题---递归回溯

来源:互联网 发布:淘宝售前客服可不可信 编辑:程序博客网 时间:2024/04/29 14:20

每次需要满足的条件:abs(x[j]-x[k])==abs(j-k) || x[j]==x[k]

#include <iostream>#include <cmath>using namespace std;const int num=8;int sum=0;int x[num]={0};bool place (int k){    for(int j=1;j<k;j++)    {        if(abs(x[j]-x[k])==abs(j-k)||x[j]==x[k])            return false;    }    return true;}void backtrack(int t){    if(t>num)    {        sum++;        for(int m=1;m<=num;m++)        {            cout<<x[m];        }        cout<<endl;    }    else    {        for(int i=1;i<=num;i++)        {            x[t]=i;            if(place(t))backtrack(t+1);        }    }}int main(){    backtrack(1);    cout<<"All solutions: "<<sum;    return 0;}

仅代表个人观点,欢迎交流探讨,勿喷~~~

这里写图片描述

PhotoBy:WLOP

http://weibo.com/wlop

0 0
原创粉丝点击