当一个边缘权重减少50%时,两个顶点之间的最短路径?

时间:2014-08-10 16:01:54

标签: algorithm graph-algorithm

这是我遇到的一个采访问题:

你会得到一个国家城市之间的飞机地图,基本上有一个有向图,权重是城市之间飞机的成本。您还获得了一张优惠券,可以在任何一个航班上获得50%的优惠券。找出您可以在两个城市之间旅行的最低费用?

1 个答案:

答案 0 :(得分:5)

此问题的基本算法是Dijkstra的最短路径算法。但是,我们需要找到一种方法来包含优惠券。

我们可以通过介绍优惠券状态来做到这一点。它是availablespent。在每个机场,州都可以是两者之一。所以我们可以复制顶点的数量(对于机场)。对于每个机场,一个顶点将具有available状态,一个顶点将具有spent状态。边缘必须稍微改变。无法从具有spent状态的顶点转到具有available状态的顶点。在另一个方向,原来的成本减半。

现在我们想要找到从起始机场(具有available状态的顶点)到目的地机场(具有spent状态的顶点)的最低成本路径。这可以通过Dijkstra的普通算法来实现。