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; }