我正在看。
let dist be a |V| × |V| array of minimum distances initialized to ∞ (infinity)
// part 1
for each vertex v
dist[v][v] ← 0
// part 2
for each edge (u,v)
dist[u][v] ← w(u,v) // the weight of the edge (u,v)
// part 3
for k from 1 to |V|
for i from 1 to |V|
for j from 1 to |V|
给定一个参数k,我试图从有向图中删除k个边,这样最大流就会尽可能地减少。这个图有一个源和一个接收器t,每个边的容量是一个。图可能包含循环,也可能不包含循环。
我建议的解决方案是首先对图执行拓扑排序,使用“宽恕”循环的算法--也许是通过忽略将我们带回源的边缘。然后(假设k >= 1):
i = 0
for each vertex u order by topological(u)
for each edge (u, v) order by topological(v) descending
if topological(v) > topological(u) th
我需要用这样的方式划分一个图,即节点X和节点Y不再连通。另外,移除的边的权重之和必须是最低的。
例如:
3 1 2
X ----- Z ----- W ----- Y
应成为:
3 2
X ----- Z W ----- Y
我首先认为我可以用一个循环来计算X和Y之间的最短路径,并去掉最便宜的边,直到没有更多的路径为止。然而,经过思考,我意识到这种方法并非在所有情况下都有效。
维基百科的搜索给我带来了Kernighan-Lin和Fiduccia-Mattheyses算法,但它们似乎是为了解决其他分区问题。
有标准的
在最近的一次计算中,我被要求设计一种算法,即for a network having V vertices and E edges, if by adding an edge (it's capacity should be 1) results in increase the maximum flow.,我们必须设计这样的算法来找到这样的边。
算法应该比O(|E|* h(|V||E|))更快,其中h(|V||E|)是计算最大流所用的时间。
提前谢谢。如果不清楚,请告诉我。