csdn上某牛人N皇后问题程序 (ZZ)






 csdn上某牛人N皇后问题程序
转载自:http://blog.csdn.net/math_is_OK/archive/2006/04/28/695838.aspx


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

long sum = 0, upperlim = 1;

void test(long row, long ld, long rd)

/*功能描述:

 *参数:

*    row:已经有皇后的列的位表示形式,如00010表示只有第4列有皇后

*    ld:表示皇后在左斜角的影响位,不能有皇后的位置

*    rd:表示皇后在右斜角的影响位,不能有皇后的位置

*/


{

   if (row != upperlim)
   {
        /*all position postion */
  long pos = upperlim & ~(row | ld | rd);
  while (pos)
  {
 long p = pos & -pos;

 pos -= p;
 test(row + p, (ld + p) << 1, (rd + p) >> 1);
  }
   } else
  sum++;
}

int main(int argc, char *argv[])
{
   time_t tm;
   int n = 16;

   if (argc != 1)
  n = atoi(argv[1]);
   tm = time(0);
   if ((n < 1) || (n > 32))
   {
  printf(" 只能计算1-32之间/n");
  exit(-1);
   }
   printf("%d 皇后/n", n);
   upperlim = (upperlim << n) - 1;

   test(0, 0, 0);
   printf("共有%ld种排列, 计算时间%d秒 /n", sum, (int) (time(0) - tm));
   system("pause");

你可能感兴趣的:(csdn上某牛人N皇后问题程序 (ZZ))