龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

八皇后问题

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
/*八皇后问题可以有多种解法,我通过找寻棋盘上各个棋子之间的斜率来解决,想与大家共同探讨 -----SET*/ /*在TC上,调试通过*/ #include int check(int c[]) /*判定棋盘上八位数列是否符合斜率

/*八皇后问题可以有多种解法,我通过找寻棋盘上各个棋子之间的斜率来解决,想与大家共同探讨 -----SET*/

/*在TC上,调试通过*/

#include

  int check(int c[])

/*判定棋盘上八位数列是否符合斜率不为+1、-1、或0,且每位数字从1到8各出现一次,若符合返回1,否则为0*/

   {int n,m;

   for (n=0;n<7;n++)

   for (m=n+1;m<8;m++)

   if (c[m]<1c[m]>8c[n]==c[m]abs(c[n]-c[m])==abs(n-m))

   return(0);

   return(1);

   }

  main()

   {int qp[8]={8,7,6,5,4,3,2,1},*p; /*qp[8]代表棋盘上八行,八个皇后在棋盘上一定是每行一个*/

  

/*八个皇后在棋盘上的横坐标一定各不相同,即1--->8各出现一次*/

/*由于数12345678可被九整除,于是用穷举法找出所有能被九整除的八位数,*/

/*其中必包含1--->8在八位中所有的排列组合*/

/*检测这些数列就能找出八皇后的所有可能*/

for (p=qp;qp[7]<9;qp[0]+=9)

   {for (p=qp;p<&qp[7];) /*对12345678每次加9,直加到87654321*/

   {if (*p>9)

   {*(p+1)+=1;

   *p-=10;

   p++;

   }

   else

   p+=8;

   }

   if (check(qp)) /*检测八位数列,返回值为真则在屏幕上输出*/

   {for (p=qp;p<=&qp[7];p++) printf ("%d",*p);

   printf (" ");

   } } }

  

精彩图集

赞助商链接