【发布时间】:2012-05-14 05:56:18
【问题描述】:
这是一个消费税:
在某些图问题中,顶点可以有权重而不是 或者除了边的权重。设 Cv 为顶点成本 v 和 C(x,y) 是边 (x, y) 的成本。这个问题很关心 在图 G 中找到顶点 a 和 b 之间最便宜的路径。 路径的成本是边和顶点的成本之和 路上遇到的。
(a) 假设图中每条边的权重为零(而 非边的成本为 ∞)。假设 Cv =1 对于所有顶点 1≤v≤n (即,所有顶点具有相同的成本)。给出一个有效的算法 找出从 a 到 b 的最便宜的路径及其时间复杂度。
(b) 现在假设顶点成本不是恒定的(但都是 正)并且边缘成本保持如上。给一个高效的 找到从 a 到 b 的最便宜路径及其时间的算法 复杂性。
(c) 现在假设边和顶点成本都不是常数 (但都是正面的)。给出一个有效的算法来找到 从 a 到 b 的最便宜路径及其时间复杂度。
这是我的答案:
(a) 使用正常的 BFS;
(b) 使用dijkstra算法,但是用顶点权重代替权重;
(c)
同样使用dijkstra算法
如果只考虑边权重,那么对于dijkstra算法的关键部分,我们有:
if (distance[y] > distance[v]+weight) {
distance[y] = distance[v]+weight; // weight is between v and y
}
现在,通过考虑顶点权重,我们有:
if (distance[y] > distance[v] + weight + vertexWeight[y]) {
distance[y] = distance[v] + weight + vertexWeight[y]; // weight is between v and y
}
我说的对吗?
我想我对 (c) 的回答太简单了,是吗?
【问题讨论】:
标签: algorithm data-structures graph shortest-path dijkstra