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

小白笨死了, DFS 写的都不对……好伤心,求大大带

  •  
  •   spencerqiu · 2014-10-28 21:31:07 +08:00 via iPad · 2353 次点击
    这是一个创建于 3481 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近折腾了几天的搜索、回溯、动规……结果到现在连数塔都写不对😂,看了半天看不出毛病,只能又跑来找大大们了……

    题目:
    第一行输入数塔层数 N
    以下 N 行为从最顶层到最底层每一层的数字

    输入样例:
    5
    7
    3 8
    8 1 0
    2 7 7 4
    4 5 2 6 5

    输出样例:
    30

    错误代码😂:
    11 条回复    2014-10-29 11:33:13 +08:00
    xjx0524
        1
    xjx0524  
       2014-10-28 22:20:02 +08:00   ❤️ 1
    score=score-a[i][j];这句放到条件语句外面来
    etolew
        2
    etolew  
       2014-10-28 22:28:40 +08:00   ❤️ 1
    同小白,路过。。。
    22-24行改成
    dfs(i+1,j);
    score=score-a[i+1][j];
    dfs(i+1,j+1);
    score=score-a[i+1][j+1];

    dfs调用之后是要恢复到上一步,
    dfs(i+1,j)里是把score加了a[i+1][j],
    所以应该减去它。
    dfs(i+1,j+1)同理。
    spencerqiu
        3
    spencerqiu  
    OP
       2014-10-28 22:29:33 +08:00 via iPad
    @xjx0524
    虽然好像还是不对,按照样例输入,输出的是 24 。不过能不能粗略讲讲这么做的原因?
    spencerqiu
        4
    spencerqiu  
    OP
       2014-10-28 22:31:50 +08:00 via iPad
    @etolew
    哈,谢谢,看懂了。

    虽然写了这么多次回溯,一直对这种回溯条件感觉怪怪的😂
    spencerqiu
        5
    spencerqiu  
    OP
       2014-10-28 22:34:52 +08:00 via iPad
    @etolew
    奇怪……执行之后还是不对耶……
    spencerqiu
        6
    spencerqiu  
    OP
       2014-10-28 22:42:19 +08:00 via iPad
    按照楼上两位大大的修改方法,虽然都不对,但是不对的是一样的,都是 24 ……

    好神奇😂
    etolew
        7
    etolew  
       2014-10-28 22:57:12 +08:00
    @spencerqiu
    我可以吐槽一下吗。。。
    粘你代码的时候我直接顺手改了就忘了

    第17行,多了一个分号,所以结果是7+8+4+5=24
    xjx0524
        8
    xjx0524  
       2014-10-28 23:06:29 +08:00
    @etolew 你这么改是不对的啊,楼主的做法是当前这层递归score就加上遍历到的结点值,你减去下一层的值显然不对。

    @spencerqiu 我跟你说的那个改法原因是if(i==n)之后要返回上一层递归了但是没有减去当前的a[i][j]
    xjx0524
        9
    xjx0524  
       2014-10-28 23:08:55 +08:00
    @etolew 不好意思看错了,你把score=score-a[i][j];这句话也删了,结果是对的。但是逻辑上最好不要这样做,当层做的改变应该当层就恢复。
    ffffwh
        10
    ffffwh  
       2014-10-29 03:45:32 +08:00
    这个用DFS是依然会有重复计算的吧
    oaix
        11
    oaix  
       2014-10-29 11:33:13 +08:00
    方法错了,应该使用 DP。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2752 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:43 · PVG 23:43 · LAX 08:43 · JFK 11:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.