2011-12-27 16:18:37
地址:http://acm.hdu.edu.cn/showproblem.php?pid=2553
题意:求n皇后放置的种类数。
mark:因为n才10,所以直接dfs。
代码:
# include <stdio.h>
int n, dp[11] = {0, 1} ;
int ans, num[11] ;
int col[11], diag[30], indiag[100] ;
void dfs(int pos)
{
int i, j ;
if (pos == n)
{
ans ++ ;
return ;
}
for (i = 1 ; i <= n ; i++)
{
if (col[i] == 1) continue ;
if (diag[i+pos]) continue ;
if (indiag[i-pos+30]) continue ;
num[pos] = i ;
col[i] = diag[i+pos] = indiag[i-pos+30] = 1 ;
dfs(pos+1) ;
col[i] = diag[i+pos] = indiag[i-pos+30] = 0 ;
}
}
int main ()
{
int i ;
for (i = 2 ; i <= 10 ; i++)
{
n = i ;
ans = 0 ;
dfs (0) ;
dp[i] = ans ;
}
while (~scanf ("%d", &i) && i)
printf ("%d\n", dp[i]) ;
return 0 ;
}