VC驿站

?找回密码
?加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 3635|亚博体育登录失败: 4
打印 上一主题 下一主题

[交流] 八皇后问题

[复制链接]
86_avatar_middle
跳转到指定楼层
1#
在线会员 发表于 2019-7-29 12:35:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
错在哪?
  1. #include
  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="<<><>
  42. ? ?? ???for(i=1;i<=8;i++)
  43. ? ?? ???{
  44. ? ?? ?? ?? ?? ? cout<<>
  45. ? ?? ???}
  46. ? ?? ???cout<<>
  47. }
复制代码




上一篇:有FZ开发木有
84_avatar_middle
推荐
在线会员 发表于 2019-8-4 10:08:32 | 只看该作者
1,不知道print属不属于关键字,先确认下吧
2,dfs函数for循环的时候b超限了,i为8,step为1,出现了b[9]
3,sum未初始化,sum++有什么意义
74_avatar_middle
2#
在线会员 发表于 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
3#
在线会员 发表于 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
5#
在线会员 发表于 2019-8-7 17:21:53 | 只看该作者
好东西,多谢分享
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

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

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

GMT+8, 2019-8-16 10:01

Powered by Discuz! X3.4

? 2009-2019 cctry.com

快速亚博体育登录失败 返回顶部 返回列表