前几天被问了道算法题,求思路 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Bryan0Z
V2EX    问与答

前几天被问了道算法题,求思路

  •  
  •  Bryan0Z 2018-09-04 09:56:50 +08:00 3053 次点击
    这是一个创建于 2601 天前的主题,其中的信息可能已经有所发展或是发生改变。
    题目大概是这样的:
    给定一张图,在图中增加若干个点和边,使得起点到到终点每条路径长度相同。示意图如下:


    如图,左边路径到终点的距离为 3,右边路径距离为 2,因此应该在右边加一个节点,使得两边长度都为 3.
    15 条回复    2018-09-04 12:57:58 +08:00
    twistoy
        1
    twistoy  
       2018-09-04 10:03:06 +08:00 via Android
    没要求加的点和边数量最小的话就很简单啊,dfs 或者 bfs 找到所有起点到终点的路径。然后都照着最长的加就可以了
    PureWhiteWu
        2
    PureWhiteWu  
       2018-09-04 10:05:12 +08:00
    两次 DFS:第一次求出最长路径,第二次加电和边。
    Bryan0Z
        3
    Bryan0Z  
    OP
       2018-09-04 10:23:18 +08:00
    @twistoy
    @PureWhiteWu
    我画的图例子比较简单,要是负责了,点和边加在哪里,怎么加都是问题
    takato
        4
    takato  
       2018-09-04 10:34:38 +08:00
    可以删除边吗?不然这题没有意义啊。。。
    Bryan0Z
        5
    Bryan0Z  
    OP
       2018-09-04 10:39:32 +08:00 via Android
    @takato 为啥没意义呀
    pipapa
        6
    pipapa  
       2018-09-04 10:53:56 +08:00 via Android
    bfs 若没有到达终点就一直加点和边,保证同时到达。是否可行?
    takato
        7
    takato  
       2018-09-04 10:54:31 +08:00
    @Bryan0Z 如果不能删除,你的例子中,右路的最短路径永远是 2 或 2 以下。
    ihainan
        8
    ihainan  
       2018-09-04 11:24:34 +08:00


    这种情况,如果出现环,路劲这一概念是怎么定义的…如果是按 1 - 2 - 4 和 1 - 2 - 3 - 4,那无论怎么添加都是无解呀……
    yemenchun1
        9
    yemenchun1  
       2018-09-04 11:26:43 +08:00
    虽然不是最优解, 但是考虑下带深度限制的 dfs?
    vegito2002
        10
    vegito2002  
       2018-09-04 11:39:45 +08:00
    这题还是有点难的, 比如
    1---2---3
    | |
    4----5

    这种, 起点是 1, 终点是 3.
    为了补全 1-2-3 这条路径的长度, 点到底加在哪里还是有点讲究: 如果加在 1-2 之间肯定不行;

    更复杂一点都情况:
    1---2---3---4---5
    | / \ |
    ------6 8------

    起点是 1, 终点是 5 这种, 所有路线都没有公共前缀或者后缀, 暂时没想到一个很系统的思路.
    vegito2002
        11
    vegito2002  
       2018-09-04 11:43:08 +08:00
    第一张图是: [1=[2], 2=[1,3,4], 3=[2,5], 4=[2,5], 5=[3,4]]
    第二张图示: [1=[2,6], 2=[1,3], 3=[2,4,6,8], 4=[3,5], 5=[4,8], 6=[1,3], 8=[3,5]]
    V 站为什么要把所有的空格都删了...
    Bryan0Z
        12
    Bryan0Z  
    OP
       2018-09-04 11:58:02 +08:00 via Android
    @vegito2002 因为默认是 markdown 格式
    Bryan0Z
        13
    Bryan0Z  
    OP
       2018-09-04 12:00:56 +08:00 via Android
    @ihainan 我也想到了,我觉得他的意思是同一个节点不能重复走,或者这是个有向图
    Bryan0Z
        14
    Bryan0Z  
    OP
       2018-09-04 12:01:56 +08:00 via Android
    @takato 我没表述清楚哈,可以在边的中间加一个点,改变路径长度
    twistoy
        15
    twistoy  
       2018-09-04 12:57:58 +08:00 via Android
    @Bryan0Z 首先,通过一次 dfs 求出来最大深度,也就是添加完边之后的期望深度。
    这个问题就变成了给一个指定点,希望起点到这个点的所有路径的长度都是 N。
    然后每个指定点的每个前驱,我们都会有一个深度的期望,这个问题就和原问题一样了,可以递归完成。
    那对于每个点,它的不同后继会给它一个不同的深度期望,这个时候应该取最小的那个期望,作为它真正的深度期望,因为更深的期望可以通过在这个点和后继之间加边来完成。
    大概这样。。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2801 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 07:08 PVG 15:08 LAX 00:08 JFK 03:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86