您的位置:首页 > 理论基础 > 计算机网络

Drainage Ditches 网络流 最大流 注意有重边 破编译器gcc貌似不要定义这样count max 等好的变量

2010-09-03 19:42 393 查看
#include<iostream>
#include<stdio.h>
using namespace std;
#define MAX 202
int e[MAX][MAX];
int n;
int m;//n是边的个数,m是点的个数
bool sign[MAX];
int path[MAX];
bool signn;
int countt;
int maxx;
void DFS(int k)
{
sign[k]=true;countt++;path[countt]=k;
if(k==m){signn=true;return ;}
int i;
for(i=1;i<=m;i++)
{

if(!sign[i]&&e[k][i]>0)DFS(i);
if(signn)return ;
}
countt--;
}
bool find()
{
int i;
for(i=0;i<=m;i++)
sign[i]=false;
countt=0;
signn=false;
DFS(1);
if(path[countt]==m)return true;
else return false;
}
int f()
{
while(find())
{
int i;
int min=10000002;
for(i=1;i<countt;i++)
if(min>e[path[i]][path[i+1]])min=e[path[i]][path[i+1]];
maxx+=min;
for(i=1;i<countt;i++)
{
e[path[i]][path[i+1]]-=min;
e[path[i+1]][path[i]]+=min;
}
}
return maxx;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
int i,j;
for(i=0;i<=m;i++)
for(j=0;j<=m;j++)
e[i][j]=0;
for(i=1;i<=n;i++)
{
int si,ei,ci;
scanf("%d%d%d",&si,&ei,&ci);
e[si][ei]+=ci;
}
maxx=0;
printf("%d/n",f());
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐