在包含至少一个绿色边的图中找到最短路径

时间:2014-04-02 19:52:32

标签: algorithm graph

我需要找到一个算法来找到从v_s到v_t的最短路径,在无向图G1中以随机方式着色为绿色和黑色,我必须传递至少一个绿色边缘。

我的解决方案(不确定最好的解决方案):

  1. 将图形G1复制到G2
  2. 在G1中将所有边缘断开连接到v_t
  3. 为同一节点添加连接到G1到G2绿边的所有节点的边 例如,如果我们在G1中有一个带有节点(v1,u1)的绿色边缘 我们将一个节点从v1添加到u2
  4. 我运行BFS以找到从v_s到v_t的最短路径(将在G2中) 通过这样做,我强制BFS传递绿色边缘以达到v_t

2 个答案:

答案 0 :(得分:0)

我的方法是运行双向Dijkstra搜索,然后只允许每个搜索的一个分支在至少一个分支包含绿色边缘时相遇。

这与您自己的方法类似,但不需要将图形复制到G2中。

答案 1 :(得分:0)

你的解决方案很棒,但我会使用Dijstra的算法而不是BFS。它通常效率更高,但这取决于数据,因为在最坏的情况下,它可以像BFS一样进行搜索,但需要支付优先级队列的额外开销。

另一个不错的解决方案,即修正本杰明的解决方案

  1. 两次运行Dijstras的单源最短路径,一次来自源,一次来自目标

  2. 穿过所有绿色边缘。对于每个,将来自源的路径和来自目标的路径相加。 选择最短的那些。

  3. 这个解决方案对我来说比你更直观,但是我没有看到一个优于另一个的真正优势。