这学期在上《运筹与优化》这门课,这周上机作业是用Matlab实现最大流算法,用BFS搜索算法遍历迭代。
算法原理请自行百度,以下为代码:

clear all;
close all;
clc;C = [0    27    27     0     0     0     0     0     00     0     0     5    12    10     0     0     00     0     0     0    15     0     0    12     00     0     0     0     0     8     6     0     00     0     0     3     0     0     6    10     00     0     0     0     0     0     0     0    180     0     0     0     0     0     0     0    120     0     0     0     0     0     0     0    220     0     0     0     0     0     0     0     0];[f, maxflow] = Maxflow(C)%f 流量分配方案
%由C表我们知道,1为s点,9为t点
%maxflow 最大流量
function [f, maxflow] = Maxflow(C)[row,column] = size(C);s = 1;t = column;f = zeros(row);%f矩阵为流量分配矩阵,初始化为0矩阵,maxflow = 0;%运用BFS搜索进行遍历,使用queuewhile 1vis = [];%表示已经访问过的节点vis = [vis s];queue_head = s;%队头queue_tail = s;%队尾queue = zeros( 1, row);%队列当作存放节点容器,先进先出原则queue( queue_head) = s;queue_head = queue_head + 1;per = zeros( 1, row);%表示每个节点的前驱节点per( s) = s;while queue_tail ~= queue_headpos = queue( queue_tail);for nxt = 1:rowif C( pos, nxt)-f( pos, nxt)>0 && isempty( find(vis == nxt,1))queue( queue_head) = nxt;queue_head = queue_head + 1;vis = [vis nxt];per(nxt) = pos;endendqueue_tail = queue_tail + 1;endif per(t) == 0%无法到达汇点,算法结束break;end%从汇点出发反向回到源点path = [];%记录路径pos_tmp = row;e_cnt = 0;%经过的边数while pos_tmp ~= sif C(per(pos_tmp),pos_tmp)-f(per(pos_tmp),pos_tmp)>0e_val = C(per(pos_tmp),pos_tmp)-f(per(pos_tmp),pos_tmp);path = [path;per(pos_tmp) pos_tmp e_val 1];%表示正向边pos_tmp = per( pos_tmp);endif C(pos_tmp,per(pos_tmp)) > 0 && f(pos_tmp,per(pos_tmp))>0e_val = f(pos_tmp,per(pos_tmp));path = [path;per(pos_tmp) pos_tmp e_val -1];%表示反向边pos_tmp = per( pos_tmp);ende_cnt = e_cnt + 1;endmin_val = min(path(:,3));maxflow = maxflow + min_val;for pos = 1:e_cntif path(pos,4) == 1f( path(pos,1),path(pos,2)) = f( path(pos,1),path(pos,2)) + min_val;elsef( path(pos,1),path(pos,2)) = f( path(pos,1),path(pos,2)) - min_val;endendendend

运行结果:

参考:https://www.cnblogs.com/tiandsp/archive/2013/07/12/3185913.html

最大流算法的Matlab实现相关推荐

  1. matlab最小费用最大流函数,最小费用最大流算法通用Matlab程序

    下面的最小费用最大流算法采用的是"基于Floyd最短路算法的Ford和Fulkerson迭加算法",其基本思路为:把各条弧上单位流量的费用看成某种长度,用Floyd求最短路的方法确 ...

  2. matlab最小费用最大流函数,Matlab最小费用最大流算法通用程序

    下面的最小费用最大流算法采用的是"基于Floyd最短路算法的Ford和Fulkerson迭加算法",其基本思路为:把各条弧上单位流量的费用看成某种长度,用Floyd求最短路的方法确 ...

  3. 【老生谈算法】matlab实现画交通流密速关系源码——交通流密速

    用matlab画交通流密速关系 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab画交通流密速关系程序源码.doc ...

  4. matlab整定串级pid,PID算法在Matlab串级控制中的应用

    PID算法在Matlab串级控制中的应用 自114 1112002039 陈艳 前言:这个专题是由王娟老师给我们授课,我感觉收获挺大的,尤其是matlab仿真软件的使用,为我以后的实验课打下良好的基础 ...

  5. 配流05—增量配流算法

    说明:指定两点间的客流需求总量,建立费用函数(阻抗函数),一般情况下费用是流量的函数,就可以运用增量配流法配流,核心还是全有全无算法,只是该方法把流量等分为N份,每次全有全无配流1份,直至流量全部被加 ...

  6. 综合算法03—FrankWolfe_BPR配流算法

    %% 算法符号及程序说明 %说明:本程序为采用美国联邦公路阻抗函数BPR时的frankwolfe算法,考虑了换乘(已经将等待时 %间考虑在内并在K短路的确定过程中计算)及拥挤附加时间,在路网情况已知时 ...

  7. fcm算法的MATLAB实现,FCM算法的matlab程序(初步)

    FCM算法的matlab程序 1.采用iris数据库 iris_data.txt 5.1 3.5 1.4 0.2 4.9 3 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0 ...

  8. 接口限流算法:漏桶算法令牌桶算法

    工作中对外提供的API 接口设计都要考虑限流,如果不考虑限流,会成系统的连锁反应,轻者响应缓慢,重者系统宕机,整个业务线崩溃,如何应对这种情况呢,我们可以对请求进行引流或者直接拒绝等操作,保持系统的可 ...

  9. 2018-4-8蚁群算法---包子阳《智能优化算法以及Matlab实现》第五章

    资料来源: <智能优化算法以及matlab实现>包子阳  余继周 编著 第五章-----蚁群算法 是一种元启发式优化算法(自己理解:就是作为群体的单位个体也就是元,在里面充当着随机的选择搜 ...

最新文章

  1. 解决每次git pull需要不用输入用户名信息
  2. Cost Function
  3. Oracle数据库常用的脚本命令(一)
  4. 开关电源雷击浪涌整改_大佬多年经验总结,开关电源EMI整改策略
  5. Too many links;mkdir
  6. 到底是谁发明了物联网?
  7. Python中的split()和rsplit()的使用
  8. Struts2.1.6 + Spring2.5+Hibernate3.2整合
  9. 如何在macOS Monterey 中开启对焦模式?
  10. JSF 2 dropdown box example
  11. 一般家用监控多少钱_安装空调一般多少钱
  12. C++简介(5)STL
  13. 推荐三款U盘烧写工具
  14. Tikhonov regularization 吉洪诺夫 正则化
  15. 小程序接口加密时去除昵称数据含有的reshuffle表情(例如emoji)
  16. 投放Google广告怎么做才是最合适的?谷歌广告的优势在哪
  17. 台式电脑键盘错乱会出现计算机模式怎么办,键盘错乱怎么修复错位(台式电脑键盘按键错乱)...
  18. 实验三 LZW编解码实验
  19. Java求1000以内的水仙花数
  20. 为什么图片和PDF合并后的PDF页面大小不一

热门文章

  1. 千万别跑漏网速!探究网速提升↑的奇招妙诀!
  2. 自学之SpringBoot
  3. Unity2D教程:UI随屏幕缩放相关问题
  4. 报税时提示服务器验证证书失败,服务器证书验证失败 服务器证书验证地址出错怎么办...
  5. 清新互联布控球RTSP地址
  6. 计算机登录用户名开机取消,电脑开机有两个用户名登录,怎样取消一个?
  7. stoi 和 atoi转换类型的有效长度问题
  8. 20款国外知名的php开源cms系统
  9. harmonyos融合搜索,鸿蒙OS 融合搜索概述
  10. C#之Console