HDU 2553 N皇后问题

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int num,hash[14],flag[14]={0};
void DFS( int cnt,int n )
{
if( cnt == n+1 )
{
num++;
return ;
}
for( int i = 1; i<= n ; i++ )
{
if( !flag[i] )
{
hash[cnt]=i;
int Flag = 0;
for( int j = 1 ; j< cnt ; j++ )
{
if( ( hash[j]-j )==( hash[cnt]-cnt )||( hash[cnt]+cnt )==(hash[j]+j) )//判断是否在对角线上
{
Flag = 1;
break;
}

}
if( !Flag )
{
flag[i]=1;
DFS( cnt+1 , n );
flag[i]=0;
}
}
}
}

int main( )
{
int sum[14];
for( int i = 1; i<=10 ; i++ )
{
num = 0;
DFS( 1 , i );
sum[i] = num;
}
int N;
while( scanf( "%d",&N ), N )
{
printf( "%d\n",sum[N] );
}
return 0;
}

 

posted @ 2012-02-29 20:18  wutaoKeen  阅读(166)  评论(0编辑  收藏  举报