找到2点之间的最大路径

时间:2016-07-05 23:01:25

标签: algorithm graph-theory graph-algorithm

鉴于无向连通图,旅行者必须多次从Sub dave() Dim i As Long Dim lastrow As Long Dim j As Long lastrow = Cells(Rows.Count, 1).End(xlUp).Row * 3 x = Array("Breakfast", "Lunch", "Dinner") For i = 1 To lastrow Cells(i + 1, 1).Resize(2).EntireRow.Insert For j = 1 To 3 Cells(i + j - 1, 3).Value = x(j - 1) Next j Cells(i, 1).Resize(3).Merge: i = i + 2 Next i End Sub 前往node A。每条边都有一个正值,从node Bnode A有多条路径。路径的值定义为该路径中所有边的最小值。如果旅行者通过特定路径从node B转到node A,则路径中所有边的值将减去路径的值(该路径中所有边的最小值)。 node B

  

请注意,图表可能包含周期,但路径只能访问节点The goal is to find the set of paths that give the maximum sum of values of all paths traveled.

例如,假设有4个节点onceABC,且旅行者必须从{{D转到D 1}}。假设行进的路径是A - > A - > B

  

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

旅行者必须使用更新的边缘值再次从D前往A,直到DA的所有路径都为0。

1 个答案:

答案 0 :(得分:1)

您的问题非常类似于最大流量/最小切割问题

因为每个路径可以行走的次数由具有最低值的边确定,所以最大值受到两个较小顶点集V和W中图的分区(“切割”)的限制,而起始节点在V中,终点节点在W中,所有边缘的值从V到W.这是因为从头到尾,旅行者必须遍历连接V和W的边,这意味着如果这些边的值为0,那么旅行者就没有更多的路径

查看Maxim生成的图片:

Max-Flow of a graph

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