hdu 2553 N皇后问题

来源:互联网 发布:qq飞车猛禽数据 编辑:程序博客网 时间:2024/06/07 03:52
对于N*N的方格,放置皇后,每行一个开始枚举,依次放置,若与前面的放置情况不冲突,递归下去,直至放到N+1行,更新方案数 #include <cstring>#include <cstdio>int num;int f;int a[15];//a[i]的值表示第i行放置的位置,a[i]=m,则表示第i行放在第m个位置 void trial(int i){   if(i == f+1)   {      num++;      return;   }   else   {      for(int m=1;m<=f;m++)//枚举每次放置的位置数(一行里面的第几个)       {         a[i] = m;         int ok = 1;//先假定可以放置在第m个位置          for(int j=1;j<i;j++)//判断与之前的情况是否冲突             if(a[i]==a[j]||i-a[i]==j-a[j]||i+a[i]==j+a[j])            {//是否同列,与边缘成45度角                ok = 0;               break;            }            if(ok)//如果可行,递归下一行的放置             trial(i+1);      }   }}int main(){   int x[11];   int N;   for( f=1;f<=10;f++)//预处理不同规格的方格    {      num=0;      trial(1);      x[f]=num;   }   while(scanf("%d",&N),N)   {      printf("%d\n",x[N]);   }   return 0;}