N皇后问题 算法 回溯法

#include 
#include 
using namespace std;

#define N 4 //皇后个数
int sum=0;
int *x=new int[N+1];

bool place(int k)//
{
    int i;
    for(i=1; iif(x[i]==x[k] || abs(i-k)==abs(x[i]-x[k])) //判断是否在同一列以及是否同一对角线
            return false;
    }
    return true;
}

void backtrack(int t) //
{
    int i=0;
    if(t>N)
    {
        for(i=1; i<=N; i++)
            cout<" ";
        cout<else
    {
        for(i=1; i<=N; i++)
        {
            x[t]=i; //重新换一个列值,体现了回溯。
            if(place(t))
                backtrack(t+1);
        }
    }
}
int main()
{
    backtrack(1);
    cout<<"共 "<" 种"<

你可能感兴趣的:(算法)