Description
Input
Output
Sample Input
Sample Output
#include<stdio.h>
  #include<string.h>
 int n,tmp;
 int map[11];
 void DFS(int k)
 {
     int i,j,flag;
     if(k==n+1)//递归边界,走到这里皇后不会冲突
      {
           tmp++;
          return;
      }
      else
      {
          for(i=1;i<=n;++i)
          {
              map[k]=i; //把第i行的皇后放到第i列
              flag=1;
              for(j=1;j<k;++j)     // 检查是否个前面的皇后冲突
              {
                  if(map[j]==i||i-k==map[j]-j||i+k==map[j]+j)   
                  {
                      flag=0;
                      break;
                  }
              }
              if(flag)               //如果合法  则继续递归
                 DFS(k+1);
          }
      }
  }
  int main()
  {
      int i,m;
      int ans[11];
     for(n=1;n<=10;++n)
     {
          tmp=0;
         DFS(1);
          ans[n]=tmp;
      }
      while(scanf("%d",&m),m)
      {
          printf("%d\n",ans[m]);
      }
      return 0;
  }
原文:http://www.cnblogs.com/LIUWEI123/p/5676847.html