网络流模板.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络流模板

网络流 最大流(邻接阵) //求网络最大流,邻接阵形式 //返回最大流量,flow返回每条边的流量 //传入网络节点数n,容量mat,源点source,汇点sink #define MAXN 100 #define inf 1000000000 int max_flow(int n,int mat[][MAXN],int source,int sink,int flow[][MAXN]){ int pre[MAXN],que[MAXN],d[MAXN],p,q,t,i,j; if (source==sink) return inf; for (i=0;in;i++) for (j=0;jn;flow[i][j++]=0); for (;;){ for (i=0;in;pre[i++]=0); pre[t=source]=source+1,d[t]=inf; for (p=q=0;p=q!pre[sink];t=que[p++]) for (i=0;in;i++) if (!pre[i]j=mat[t][i]-flow[t][i]) pre[que[q++]=i]=t+1,d[i]=d[t]j?d[t]:j; else if (!pre[i]j=flow[i][t]) pre[que[q++]=i]=-t-1,d[i]=d[t]j?d[t]:j; if (!pre[sink]) break; for (i=sink;i!=source;) if (pre[i]0) flow[pre[i]-1][i]+=d[sink],i=pre[i]-1; else flow[i][-pre[i]-1]-=d[sink],i=-pre[i]-1; } for (j=i=0;in;j+=flow[source][i++]); return j; } 上下界最大流(邻接阵) //求上下界网络最大流,邻接阵形式 //返回最大流量,-1表示无可行流,flow返回每条边的流量 //传入网络节点数n,容量mat,流量下界bf,源点source,汇点sink //MAXN应比最大结点数多2,无可行流返回-1时mat未复原! #define MAXN 100 #define inf 1000000000 int limit_max_flow(int n,int mat[][MAXN],int bf[][MAXN],int source,int sink,int flow[][MAXN]){ int i,j,sk,ks; if (source==sink) return inf; for (mat[n][n+1]=mat[n+1][n]=mat[n][n]=mat[n+1][n+1]=i=0;in;i++) for (mat[n][i]=mat[i][n]=mat[n+1][i]=mat[i][n+1]=j=0;jn;j++) mat[i][j]-=bf[i][j],mat[n][i]+=bf[j][i],mat[i][n+1]+=bf[i][j]; sk=mat[source][sink],ks=mat[sink][source],mat[source][sink]=mat[sink][source]=inf; for (i=0;in+2;i++) for (j=0;jn+2;flow[i][j++]=0); _max_flow(n+2,mat,n,n+1,flow); for (i=0;in;i++) if (flow[n][i]mat[n][i]) return -1; flow[source][sink]=flow[sink][source]=0,mat[source][sink]=sk,mat[sink][source]=ks; _max_flow(n,mat,source,sink,flow); for (i=0;in;i++) for (j=0;jn;j++) mat[i][j]+=bf[i][j],flow[i][j]+=bf[i][j]; for (j=i=0;in;j+=flow[source][i++]); return j; } 上下界最小流(邻接阵) //求上下界网络最小流,邻接阵形式 //返回最大流量,-1表示无可行流,flow返回每条边的流量 //传入网络节点数n,容量mat,流量下界bf,源点source,汇点sink //MAXN应比最大结点数多2,无可行流返回-1时mat未复原! #define MAXN 100 #define inf 1000000000 int l

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档