这是一个消费税:
在某些图问题中,顶点可以有权重来代替或除了边的权重之外。令 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) 的回答太简单了,是吗?