1. 程式人生 > >N皇后(遞迴演算法)

N皇后(遞迴演算法)

#include<bits/stdc++.h>
using namespace std;
int c=0;
int cheak(int x[],int nowhang)
{
//判斷是否在同一列,在對角 
int i;
for(i=1;i<nowhang;i++)
if(x[i]==x[nowhang]||fabs(i-nowhang)==fabs(x[i]-x[nowhang]))
return 0;
return 1;
}
void queen(int n,int x[],int now)
{
//從第一行開始x=1 
int i;
for(i=1;i<=n;i++)
{
x[now]=i;//每一次從第一列開始往最後一列放 
if(cheak(x,now)==1)
{
if(now==n)//放到最後一行,計數++ 
c++;
else
queen(n,x,now+1);//否則繼續往下一行放 
}
}
}
int main()
{
int t,n,x[25];
cin>>t;
while(t--)
{
cin>>n;
queen(n,x,1);
cout<<c<<endl;
c=0;
}
return 0;
 }