找到两点之间的最大路径

Find maximum paths between 2 points

给定一个无向连通图,旅行者必须多次从 node A 旅行到 node B。每条边都有一个正值,从 node Anode B 有多个路径。路径的值定义为该路径中所有边的最小值。如果旅行者通过特定路径从 node Anode B,则路径中所有边的值都会减少该路径的值(这是该路径中所有边的最小值)。 The goal is to find the set of paths that give the maximum sum of values of all paths traveled.

Note the graph may contain cycles but a path can only visit a node once

例如,假设有 4 个节点 ABCD,旅行者必须从 D A。假设走过的路径是A->B->D

edge_A_B = 5

edge_B_D = 3

那么路径的值为

min(edge_A_B, edge_B_D) = 3

走完这条路后

edge_A_B = 5 - 3 = 2

edge_B_D = 3 - 3 = 0

并且旅行者必须使用更新的边值再次从 A 行进到 D,直到从 AD 的所有路径都具有 0 值。

您的问题与Max-Flow/Min-Cut-Problem非常相似。

因为每条路径可以走的次数由具有最低值的边决定,最大值受限于图在两个较小的顶点集 V 和中的分区 ("the cut") W,而起始节点在 V 中,结束节点在 W 中,以及从 V 到 W 的所有边的值。这是因为要从头到尾,行者必须遍历连接 V 和 W 的边,这意味着如果这些边的值为 0,则旅行者将无法再选择其他路径

查看这张由 Maxim 制作的图片:

右边的数字代表边缘的值,左边的数字代表流(或你的情况下经过的路径)。 这里,割的最小值为5,是o和q或q和t之间的垂直割。因此,最大流量(或者在您的情况下,所有路径的最大值)也是 5。由于传入流量的值等于传出流量的值(开始和结束节点除外),因此它是很容易找到他后来走过的路。在这种情况下,它是 {{s, o, q, t}, {s, o, q, r, t}, {s, p, r, t}}.