V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
spencerqiu
V2EX  ›  问与答

用回溯解决的素数环问题,有一段代码没看懂

  •  
  •   spencerqiu · 2014-09-21 00:34:10 +08:00 via iPad · 2181 次点击
    这是一个创建于 3728 天前的主题,其中的信息可能已经有所发展或是发生改变。
    问题:1 - 20 这 20 个数字,输出所有使相邻两个数的和皆为素数(包括第 1 个数和第 20 个数)的排列。

    下面是代码,主要是第二面的 if 语句中这段没看懂。
    search(t+1);
    b[i]=true;

    搞不懂的在于
    1.既然是回溯,比如我在搜第 5 个数的时候发现此时可使用的所有数都无法使用,似乎这里也并没有一段退回第 4 个数的第 i 次选择的代码啊……
    2.既然已经 search(t+1) 了,似乎这里就是已经退出 search(t) 了(?)那么 b[i]=true 还会被执行么?

    5 条回复    2014-09-21 07:04:59 +08:00
    GtDzx
        1
    GtDzx  
       2014-09-21 00:46:21 +08:00
    感觉你对函数调用还是不很理解
    search(t+1)执行结束后会返回search(t)的b[i]:=true;继续执行
    casparchen
        2
    casparchen  
       2014-09-21 01:07:36 +08:00 via iPad
    保存现场什么的
    xjx0524
        3
    xjx0524  
       2014-09-21 01:10:28 +08:00
    先理解一下递归的含义吧,话说现在竞赛不是没有保送了么
    randomize
        4
    randomize  
       2014-09-21 06:56:11 +08:00 via iPad
    @GtDzx
    谢谢大大,大大是说如果 search(t+1) 执行全部失败,会退回到 search(t) ,并且 b[i]=true ,然后在上一次调用继续执行?
    randomize
        5
    randomize  
       2014-09-21 07:04:59 +08:00 via iPad
    @spencerqiu
    PO 主也是学 OI 的?可以留个联系方式交流一下?本人高一 C++ 蒟蒻。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4059 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:12 · PVG 12:12 · LAX 20:12 · JFK 23:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.