dinic算法 java_对最大流算法Dinic的研究与理解

早上困得不行,坐在电脑面前一直想睡觉。跑到教室外面的走廊上看《数据结构与算法》(java语言版)对Dinic算法的讲解。

其实这个算法理解起来不难。当然还没有编程实现,希望不会被认为站着说话不腰疼。  我的理解就是:不停的分层,然后不停的按层寻路!

分层:就是从汇点开始,所有与汇点相邻的点记录其层次为1,然后遍历整个层次为1的点,找与其相邻的点,记其层次为2……直到找到源点为止。所以很容易看出来,这必须用BFS搜索整个图。

寻路:按层次找出所有连接源点到汇点的路径。当然每找到一条就需要把这个层次中路径的流量更改。表示这条路已经有人买断了 呵呵 !一般而言,至少能找到一条满足条件的路径!如果符合条件的路已经全部找完,你需要做的很简单,再分层!然后再寻路。为了快速寻路,当然会用到DFS算法。

如果那一次分层后,你找不到路了,那么恭喜你!整个算法走到终结!可以回家吃饭了 呵呵 ……

所以书上会说:Dinic算法是BFS和DFS的综合运用!学了这么多天的图论算法过后,我终于渐渐能理解:“DFS和BFS是整个图论算法的基础”这句话了!无论是求最短路的Dijkstra,Bellman-Ford 还是求最小生成树的Prime、Kruskal ,或者求二部图匹配的Hungarian,或者求最大流的2F、Dinic 都是基于图的搜索,在此基础上增加一些搜索的条件或者过滤一些点而已!这里需要提一下的是 Floyd算法可能有些另类,但我们总需要一些与众不同的声音的存在吧!而且这种跳出框框的思维是很值得珍视的 !

有一个问题:我用2F算法实现并没有出现书上所说的小流量增量的循环。难道是我的2F基因突变了? 所以弄完2F我就直接跳到了Dinic,没有去研究EK算法了!先就写到这里,下去把算法实现再说吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值