鱼C论坛

 找回密码
 立即注册
查看: 4443|回复: 7

八皇后问题 问题求助

[复制链接]
发表于 2014-4-21 16:22:46 | 显示全部楼层
回溯只需要用8!次来解。。。4万次计算而已。。

8^8可是1千600多万种结果。。这是穷举的方法。。不是递归
递归和穷举有区别。这个在放皇后之前有用notDanger去查是否可以放,不可以放就直接跳过该格子。具体多少次计算我也不大会算。但这绝对不是穷举的方法。

附上我学过的代码。

  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>

  4. int row[8];
  5. int tc,a,b,solc;


  6. bool place (int r, int c){
  7.         for (int prev=0;prev<c;prev++){
  8.                 if (row[prev]==r||(abs(prev-c)==abs(row[prev]-r)))return false;
  9.         }
  10.         return true;
  11. }

  12. void backtrack(int n){
  13.         if (n==8){
  14.                 printf("第%d种\n",++solc);
  15.                 for (int j=0;j<8;j++){
  16.                         for (int i=0;i<8;i++){
  17.                                 if (row[i]==j)printf ("1 ");
  18.                                 else printf("0 ");
  19.                         }
  20.                         printf("\n");
  21.                 }
  22.                
  23.         }
  24.        
  25.         for (int r=0;r<8;r++){
  26.                 if (place(r,n)){
  27.                         row[n]=r;
  28.                         backtrack(n+1);
  29.                 }
  30.         }
  31.        
  32. }
  33. int main()
  34. {
  35.                 memset(row,0,sizeof(row));
  36.                 solc=0;
  37.                 backtrack(0);
  38.         return 0;
  39. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-22 04:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表