题目描述
请设计一种算法,解决著名的n皇后问题。这里的n皇后问题指在一个nxn的棋盘上放置n个棋子,使得每行每列和每条对角线上都只有一个棋子,求其摆放的方法数。
给定一个int n,请返回方法数,保证n小于等于10
测试样例:
1
返回:1
class Queens { public: int nQueens(int n) { // write code here int count=0; int *a=new int[n+1]; Queues1(a,1,n,count); return count; } void Queues1(int a[], int i, int n, int &count) { if(i>n) { count++; return; } for(int j=1;j<=n;j++) { a[i]=j; if(place(a,i)) Queues1(a,i+1,n,count); } } int place(int a[],int i) { for(int j=1;j<i;j++) { if(a[i]==a[j]||a[i]-a[j]==(i-j)||a[j]-a[i]==(i-j)) return 0; } return 1; } };