高效的最大流量算法可将尽可能多的人员路由到一个位置?

问题描述

我正在尝试使用有向图来确定一种有效的最大流量算法,其中给出给定的 n 个航班列表(其中每个条目都有起点城市,终点城市,出发时间,到达时间,以及航班的容量),将尽可能多的路线从城市A出发,一直到城市B。我还希望能够返回一组可以乘坐的航班,以便最大可能的人数从城市A到城市B。我认为它可以只是福特-福克森算法的一种实现或类似的实现,但是我无法以一种有效的方式将该时间表转换为最大流量实例,具体说来就是该算法的伪代码执行完后的样子。

解决方法

您正在考虑的算法可以达到目的,但是必须正确构造要使用的图形。

您的问题是时间。假设您想在14:00之前从AC的人们,我们共有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

您可以在此处看到可以填充所有航班,并及时从AC获得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)],上限。无限

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...