1. 程式人生 > >杭電acm——2553(N皇后問題)

杭電acm——2553(N皇后問題)

#include<iostream>
using namespace std;
#include<math.h>
#include<cstring>
int x[15],y[15],z[15],n,k;
bool isRQ(int m)
{
	int i=1;
	while(i<m)
	{
		if(x[i]==x[m]||abs(x[i]-x[m])==abs(i-m))
			return false;
		i++;
	}
	return true;
}
void dfsplay(int m)
{
	int i;
	if(m==k+1)
	{
		n++;
		return;
	}
	for(i=1;i<=k;i++)
	{
		x[m]=i;
		if(isRQ(m)&&y[m]==0)
		{
			y[m]=1;
			dfsplay(m+1);
			y[m]=0;
		}	
	}
}
int main()
{
	for(k=1;k<=10;k++)
	{
		memset(x,0,sizeof(x));
		memset(y,0,sizeof(y));
		n=0;
		dfsplay(1);
		z[k]=n;
	}
	while(cin>>k)
	{
		if(k==0) break;
		cout<<z[k]<<endl;
	}
	return 0;
}