【问题标题】:Dijkstra's algorithm on a reverse graph逆向图上的 Dijkstra 算法
【发布时间】:2019-04-06 20:11:12
【问题描述】:

如果我们将图 G 反转为 G' 并从源顶点 't' 对 G' 运行 Dijkstra 算法,该算法是否会给出从 G 中的所有顶点到 't' 的最短路径。有人可以证明或找到反例吗?

【问题讨论】:

  • 它将给出 G' 中 from t 的最短路径。但是,如果这就是您的意思,那么这些确实等效于 G 中到 t 的最短路径。鉴于当然存在这样的最短路径,即没有负循环,并且顶点是连接的。
  • 矛盾证明似乎有效。

标签: algorithm data-structures graph-theory dijkstra


【解决方案1】:

首先,如果 G 是一个无向图。反向图上的最短路径没有区别。

其次,如果 G 是一个有向图,并且如果我们仔细研究 Dijkstra 的,它只会说明在邻居中选择最短边。所以我想它也会起作用。

【讨论】:

    【解决方案2】:

    简短回答:是的,您的陈述在有向图中是正确的

    在无向图G 中,反转G' 将产生相同的图G,因此,当您找到从源顶点s 到所有其他顶点的最短距离时,您会自动找到从所有顶点到s 的最短路径,因为图形可以反向遍历(无向)。

    在有向图中,当您找到从s(源)到所有其他顶点(目的地)的最短路径时,您将沿着单一方向行驶,从source--->destination_1,从@987654330 @--->destination_2,来自source--->destination_3...

    因此,如果您反转图表中的所有方向,所有最短路径将是:到source<---destination_1,到source<---destination_2,到source<--- destination_3 ... 请注意这些路径将与以前不同 即当您在G' 上运行Dijkstras 时,算法认为它正在寻找从s 到的最短路径所有d,而实际上,由于您颠倒了方向,因此最短路径箭头实际上指向相反方向,从而为我们提供了从所有ds 的最短路径,而不是从s 到@ 987654352@的。

    Graph G:  
    
           7           +++++  
       //===>===>====>/ D2 /  
      //              +++++  
     //   /--<<---<--/   /|\
    s <---         2      | 1 
     \\   \__<<___        |
      \\      9    \      |
       \\           \ +++++  
        \\===>=====>/ D1 /  
              10    +++++  
    
    
    Graph G':
    
           7           +++++
       /----<----<---</ D2 /
      /               +++++
     /    //==>>====>==/   ||
    s >===       2         || 1
     \    \__>>___         || 
      \      9    \       \||/
       \           \ +++++
        \---<------</ D1 /
              1     +++++
    

    如上所示,在 G 中,从 sd1 的最短路径是 s -&gt; d1,从 sd2s -&gt; d2(以双线显示 (=, @ 987654361@, //))。

    在反转方向时,但不是权重(显然),我们看到从 sd1 的最短路径是 s -&gt; d2 -&gt; d1 和从 sd2 的最短路径是 s -&gt; d2 Djikstras 算法的输出。

    如果您现在将方向设置为原来的方向,显然所有选择的路径实际上都是最短路径 s 而不是来自s

    Graph G:
    
           7           +++++
       /---->---->--->/ D2 /
      /               +++++
     /    //==<<===<==/   /||\
    s <===       2         || 1
     \    \__<<___         || 
      \      9    \        ||
       \           \ +++++
        \--->------>/ D1 /
              1     +++++
    

    P.S.:我知道演示文稿不是那么好。对不起。

    【讨论】:

      猜你喜欢
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多