VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 3998|回复: 4

八皇后问题

[复制链接]
86_avatar_middle
最佳答案
0 
在线会员 发表于 2019-7-29 12:35:35 | 显示全部楼层 |阅读模式
错在哪?
  1. #include<iostream>
  2. int sum,f[9];
  3. bool a[16],b[9],c[16];
  4. using namespace std;
  5. int dfs(int step);
  6. void print();
  7. int main()
  8. {
  9.         dfs(1);
  10.         return 0;
  11. }
  12. int dfs(int step)
  13. {
  14.         int i;
  15.         for(i=1;i<=8;i++)
  16.         {
  17.                 if((!a[i])&&(!b[i+step])&&(!c[i-step+7]))
  18.                 {
  19.                         f[step]=i;
  20.                         a[i]=true;
  21.                         b[i+step]=true;
  22.                         c[step-i+7]=true;
  23.                         if(i==8)
  24.                         {
  25.                                 print();
  26.                         }
  27.                         else
  28.                         {
  29.                                 dfs(step+1);
  30.                         }
  31.                         a[i]=false;
  32.                         b[i+step]=false;
  33.                         c[step-i+7]=false;
  34.                 }
  35.         }
  36. }
  37. void print()
  38. {
  39.         int i;
  40.         sum++;
  41.         cout<<"sum="<<sum<<endl;
  42.         for(i=1;i<=8;i++)
  43.         {
  44.                 cout<<f[i];
  45.         }
  46.         cout<<endl;
  47. }
复制代码




上一篇:【实用C++】零基础入门教程35课strlen单步调试疑问!
下一篇:我用PostMessage最小化后,发现SetTimer用不了了,请问咋解决?
84_avatar_middle
最佳答案
0 
在线会员 发表于 2019-8-4 10:08:32 | 显示全部楼层
1,不知道print属不属于关键字,先确认下吧
2,dfs函数for循环的时候b超限了,i为8,step为1,出现了b[9]
3,sum未初始化,sum++有什么意义
74_avatar_middle
最佳答案
0 
在线会员 发表于 2019-8-2 11:20:10 | 显示全部楼层
本帖最后由 xd_ydchen 于 2019-8-2 11:23 编辑

我想 dfs 函数改成这个样子是可以的

  1. int dfs(int step)
  2. {
  3.     int i;
  4.     bool g[9] = {0};
  5.     for (i = 1; i < step; i++)
  6.     {
  7.         /* unusable grids */
  8.         int res = f[i];
  9.         g[res]=true;
  10.         
  11.         int diff_line = step - i;
  12.         if (res - diff_line >= 1 && res - diff_line <= 8)
  13.             g[res - diff_line]=true;
  14.         if (res + diff_line >= 1 && res + diff_line <= 8)
  15.             g[res + diff_line]=true;
  16.     }
  17.     for(i = 1; i <= 8; i++)
  18.     {
  19.         if(!g[i])
  20.         {
  21.             f[step]=i;
  22.             if(step==8) /*last step*/
  23.             {
  24.                 print();
  25.             }
  26.             else
  27.             {
  28.                 dfs(step+1);
  29.             }
  30.         }
  31.     }
  32. }
复制代码
74_avatar_middle
最佳答案
0 
在线会员 发表于 2019-8-2 11:42:37 | 显示全部楼层
  1. int dfs(int step)
  2. {
  3.     int i;
  4.     for(i=1;i<=8;i++)
  5.     {
  6.         bool able = true;
  7.         for (int st = 1; st < step; st++)
  8.         {
  9.             int diff = step - st;
  10.             if (f[st] == i || f[st] + diff == i || f[st] - diff == i)
  11.             {
  12.                 able = false;
  13.                 break;
  14.             }
  15.         }
  16.         if(able)
  17.         {
  18.             f[step]=i;
  19.             if(step==8)
  20.             {
  21.                 print();
  22.             }
  23.             else
  24.             {
  25.                 dfs(step+1);
  26.             }
  27.         }
  28.     }
  29. }
复制代码
43_avatar_middle
最佳答案
0 
在线会员 发表于 2019-8-7 17:21:53 | 显示全部楼层
好东西,多谢分享
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-11-29 00:03

Powered by CcTry.CoM

© 2009-2020 cctry.com

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