N皇后问题,回溯法

来源:互联网 发布:手机电脑连接软件 编辑:程序博客网 时间:2024/04/30 23:06
#include <iostream>#include <cstdlib>#define N 15using namespace std;int n;//皇后个数int sum=0;//可行解个数int x[N];//皇后序列int place(int k){    int i;    for(i=1; i<k; i++)    {        if(abs(k-i)==abs(x[k]-x[i])||x[k]==x[i])            return 0;    }    return 1;}int queen(int t){    if(t>n&&n>0)    {        sum++;         for(int j=1; j<=n; j++)    {        cout<<x[j]<<" ";    }    cout<<endl;;    }    else    {        for(int i=1; i<=n; i++)        {            x[t]=i;            if(place(t))            {                queen(t+1);            }        }    }    return sum;}int main(){    int t;    cout<<"输入皇后个数:"<<endl;    cin>>n;cout<<"结果序列为:"<<endl;    if(n==0)    {        t=0;    }    else t = queen(1);    cout<<"共"<<t<<"组"<<endl;    return 0;}