FordFulkerson算法求网络最大流(java)

来源:互联网 发布:淘宝我订购的服务 编辑:程序博客网 时间:2024/05/18 15:57
FordFulkerson算法3个核心的概念:残留网络、增广路径和流网络的割(详细介绍参考算法导论)
所测试的网络结构图如图所示:

第1次遍历在残留网络中找到S->V2->V1->V3->T这条增广路径(下图A),这时的网络流量如图B

执行第2次遍历的时候在残留网络中找到S->V2->V4->T这条增广路径(下图A),这时的网络流量如图B

执行第3次遍历的时候在残留网络中找到S->V2->V4->V3->T这条增广路径(下图A),这时的网络流量如图B

执行第4次遍历的时候在残留网络中找到S->V1->V2->V4->V3->T这条增广路径(下图A),这时的网络流量如图B

执行第5次遍历的时候在残留网络中找到S->V1->V3->T这条增广路径(下图A),这时的网络流量如图B

执行第6次遍历的时候在残留网络中再找不到增广路径,此时找到网络最大流为23

代码实例:
DataSource用于封装数据源信息
Edge用于封装边信息,该类覆盖了equals和hashCode方法,使Edge("start","end",0,0,0)和Edge("end","start",0,0,0)两个对象相等,便于判断回路
FordFulkerson类用来计算网络最大流
Main类用于测试FordFulkerson算法
代码可点击以下链接下载:
http://download.csdn.net/detail/javaman_chen/4867350
测试结果如下:
网路最大流为:23
流信息如下:
V3->T    :    19
V4->T    :    4
V4->V3    :    7
V1->V2    :    10
V1->V3    :    12
S->V2    :    13
V3->V2    :    0
S->V1    :    10
V2->V1    :    4
V2->V4    :    11


原创粉丝点击