1319-n皇后问题

时间:2023-03-09 02:11:35
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;
}