八皇后问题

#include<iostream>
using namespace std;
/*************用数组下标保存行号,数组内容保存列号********************/
bool judge(int a[],int n)
{
    int k=a[n]+n;
    int j=a[n]-n;
    for(int i=0;i<n;i++)
    {
        if(a[i]==a[n])
            return false;
        if(k==a[i]+i)
            return false;
        if(j==a[i]-i)
            return false;
    }
    return true;
}
void output(int a[],int n)
{
    for(int i=0;i<n;i++)
        cout<<a[i];
    cout<<endl;
}
/*************a为棋盘状态,i为当前行数,n为棋盘大小************************/
void Trial(int a[],int i,int n)
{
    if(i>=n)
        output(a,n);
    else
    {
        for(int j=0;j<n;j++)
        {
            a[i]=j;
            if(judge(a,i))
                Trial(a,i+1,n);
        }
    }
}

int main()
{
    int a[8];
    Trial(a,0,8);
    return 0;
}

原文地址:https://www.cnblogs.com/hutao886/p/4502305.html