最大流和最小割的最短增益路径法.doc_第1页
最大流和最小割的最短增益路径法.doc_第2页
最大流和最小割的最短增益路径法.doc_第3页
最大流和最小割的最短增益路径法.doc_第4页
最大流和最小割的最短增益路径法.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

最大流和最小割的最短增益路径法最大流和最小割的最短增益路径法实验目的:1.理解迭代改进基本原理;2.掌握最短增益路径法;实验平台:Microsoft Visual C+ 6.0实验过程:1.编程实现最短增益路径算法:#include #include #include using namespace std;class Gpublic:G();G(int n,int start,int end);void Edge(int a,int b,int flow); /a,b之间的流量void Maxflow(); /计算最大流void Leastcut(); /计算最小割private:int N,Start,End, /N是顶点个数,Start是源点End是汇点*Map, /网络流量*Flow, /通过流量*Rest, /剩余流量*Pre, /标记流向,正为前向,负为后向*Sign, /顶点是否标记,0为未标记,1为已标记*P; /过程变量,记录流量bool SignN(); /标记顶点int Min(int a,int b); /计算最小值void Update(); /更新网络;G:G() Pre=NULL;G:G(int n,int start,int end)N=n;Start=start;End=end;Map=new int*N+1;Flow=new int*N+1;Rest=new int*N+1;Pre=new intN+1;Sign=new intN+1;P=new intN+1;for(int i=1;i=N;i+)Mapi=new intN+1;Flowi=new intN+1;Resti=new intN+1;Signi=0;Pi=0;for(i=1;i=N;i+)for(int j=1;j=N;j+)Mapij=0;Flowij=0;Restij=0;int G:Min(int a,int b)if(ab) return a;return b;void G:Edge(int a,int b,int flow)if(aN | bN) return;Mapab=flow;void G:Update()for(int i=1;i=N;i+)Signi=0;for(int j=1;j=N;j+)Restij=Mapij-Flowij;bool G:SignN()Update();queue que;que.push(Start);SignStart=1;PStart=1000000;PreStart=-1;while(!que.empty()int head=que.front();que.pop();for(int i=1;i0 & Signi=0)Pi=Min(Phead,Restheadi);Prei=head;Signi=1;if(i=End) return true;que.push(i);for(i=1;i0 & Signi=0)Pi=Min(Phead,Flowihead);Prei=-head;Signi=1;if(i=End) return true;que.push(i); return false;void G:Maxflow()int maxflow=0;while(SignN()maxflow=maxflow+PEnd;for(int i=End;i1;i=abs(Prei)if(Prei0)FlowPreii=FlowPreii+PEnd;if(Prei0)Flowiabs(Prei)=Flowiabs(Prei)-PEnd;cout最大流:maxflowendl;void G:Leastcut()cout最小割:;int leastcut=0;for(int i=1;i=N;i+)if(Signi=1)for(int j=1;j0 & Mapij=Flowij & Signj=0)cout(i,j) ;leastcut=leastcut+Mapij;coutendl最小割流量:leastcutendl;2.通过上述程序求解教材274页第二题:a.测试代码:void main()G Graph(6,1,6);Graph.Edge(1, 2, 5); Graph.Edge(1, 3, 6); Graph.Edge(2, 4, 4); Graph.Edge(2, 5, 2); Graph.Edge(3, 4, 7); Graph.Edge(4, 6, 8); Graph.Edge(5, 6, 4);Graph.Maxflow();Graph.Leastcut();测试结果:最大流:10最小割:(2,5) (4,6)最小割流量:10b.测试代码:void main()G Graph(6,1,6);Graph.Edge(1, 2, 2); Graph.Edge(1, 3, 7); Graph.Edge(2, 4, 3); Graph.Edge(2, 5, 4); Graph.Edge(3, 4, 4); Graph.Edge(3, 5, 2); Gr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论