N皇后

#include <stdio.h>
#include <math.h>
int sum, N, map[20], a[15];
/*int place(int k)
{
  for(int i = 1; i < k; i++)
  {
  if(abs(k-i) == abs(map[k]-map[i]) || map[i] == map[k])
   return 0;
  } 
  return 1;
}*/
void dfs(int x)
{
 int i, j; 
 if(x > N)
 {
  sum++;
  return ;
 }
 for( i = 1; i <= N; i++)
  {
   int flag = 1;
   map[x] = i;
   /*if(place(x))
    dfs(x+1); */
   for( j = 1; j < x; j++)
   {
    if( i == map[j] || abs(map[j]-i) == abs(j-x) )
    //if(i==map[j]  ||  j+map[j]==i+x || map[j]-j==i-x)
    {
     flag = 0;
     break;
    }
   }
   if(flag) 
    dfs(x+1);
  }
}
int main()
{ 
 //int t;
 for(N = 1; N <= 10; N++)
 {
  sum = 0;
  dfs(1);
  a[N] = sum;
 }
 while(~scanf("%d", &N), N)
 {
 /* sum = 0;
  dfs(1);
  //t = sum;*/ 
  printf("%d
",a[N]);
 }
 return 0;

}
原文地址:https://www.cnblogs.com/digulove/p/4708070.html