鉴于无向连通图,旅行者必须多次从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 B
到node 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个节点once
,A
,B
,C
,且旅行者必须从{{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
,直到D
到A
的所有路径都为0。
答案 0 :(得分:1)
您的问题非常类似于最大流量/最小切割问题。
因为每个路径可以行走的次数由具有最低值的边确定,所以最大值受到两个较小顶点集V和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}}
。