1319-n皇后问题

描述

 

在n×n 格的棋盘上放置彼此不受攻击的n 个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n×n格的棋盘上放置n个皇后,任何2 个皇后不放在同一行或同一列或同一斜线上。设计一个解n 后问题的队列式分支限界法,计算在n´ n个方格上放置彼此不受攻击的n个皇后的一个放置方案。

输入

 

第一行有1 个正整数n。

输出

 

将计算出的彼此不受攻击的n个皇后的一个放置方案输出。第1行是n个皇后的放置方案。

样例输入

5

样例输出

1 3 5 2 4

#include<iostream>
using namespace std;
bool place(int k,int i,int*x)
{
    for(int j=0;j<k;j++)
        if((x[j]==i)||(abs(x[j]-i)==abs(j-k)))
            return false;
    return true;
}
void nqueens(int k,int n,int *x)
{
    for(int i=0;i<n;i++)
    {
        if(place(k,i,x))
        {
            x[k]=i;
            if(k==n-1)
            {                 
                for(int i=0;i<n;i++)                   
                    cout<<x[i]+1<<" ";
                cout<<endl;
                exit(0);
            }        
            else nqueens(k+1,n,x);
        }
    }
}
int main()
{
    int n,*x;
    cin>>n;
    x=(int*)malloc(n*sizeof(int));
    nqueens(0,n,x);
    return 0;
}

  

原文地址:https://www.cnblogs.com/Rosanna/p/3437038.html