问题描述
我正在尝试使用有向图来确定一种有效的最大流量算法,其中给出给定的 n 个航班列表(其中每个条目都有起点城市,终点城市,出发时间,到达时间,以及航班的容量),将尽可能多的路线从城市A出发,一直到城市B。我还希望能够返回一组可以乘坐的航班,以便最大可能的人数从城市A到城市B。我认为它可以只是福特-福克森算法的一种实现或类似的实现,但是我无法以一种有效的方式将该时间表转换为最大流量实例,具体说来就是该算法的伪代码执行完后的样子。
解决方法
您正在考虑的算法可以达到目的,但是必须正确构造要使用的图形。
您的问题是时间。假设您想在14:00之前从A
到C
的人们,我们共有4个航班:
航班1:A。-> B,10:00-> 11:00,上限。 100
航班2:第Cap:A-> B,11:00-> 12:00 100
航班3:B章:B-> C,11:30-> 12:30 100
航班4:B.B-> C,12:30-> 13:30 100
您可以在此处看到可以填充所有航班,并及时从A
到C
获得200,但是构造图表需要考虑时间。
我的建议是,您没有一个节点来代表B
,而是有几个节点:
(B,11:00)
-B
在11:00。(B,12:00)
-B
在12:00。(B,12:30)
-#3航班起飞时。(B,13:30)
-#4航班起飞时。
从相关的B
节点开始,任何可以从B
出发的航班都会被添加到图表一次。
B
个节点在向前移动的顺序中以无限容量连接到边缘的其他B
个节点。这样一来,乘客可以在B
的不同时间之间“等待”。
此示例将以以下边列表结束:
//飞行边缘
[{(A,10:00)
,(B,11:00)
],上限。 100
[{(A,11:00)
,(B,12:00)
],上限。 100
[{(B,11:30)
,(C,12:30)
,(C,13:00)
],上限。 100
//等待的边缘
[{(B,11:30)
],上限。无限
[{(B,11:30)
,(B,12:00)
],上限。无限
[{(B,12:00)
,(B,12:30)
],上限。无限