Skip to content

Commit 63356a0

Browse files
committed
max-flow
1 parent 35e5b7b commit 63356a0

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

max-flow/max-flow.cpp

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#include <iostream>
2+
#include <limits.h>
3+
using namespace std;
4+
#define n 6
5+
int g[6][6]={{0, 9, 9, 0, 0, 0},
6+
{0, 0, 4, 8, 0, 0},
7+
{0, 0, 0, 1, 3, 0},
8+
{0, 0, 0, 0, 0, 10},
9+
{0, 0, 0, 8, 0, 7},
10+
{0, 0, 0, 0, 0, 0}};
11+
12+
13+
14+
int bfs(int v,int *parent)
15+
{int visited[6]={0};
16+
visited[v]=1;
17+
int q[8];
18+
int i,f=0,r=-1;
19+
q[++r]=v;
20+
21+
while(f<=r)
22+
{v=q[f++];
23+
for(i=0;i<n;i++)
24+
{if(visited[i]==0&&g[v][i]!=0)
25+
{//cout<<i;
26+
*(parent+i)=v;
27+
q[++r]=i;
28+
visited[i]=1;
29+
}
30+
}
31+
}
32+
return((visited[5]==1)?1:0);
33+
}
34+
35+
36+
int max_flow()
37+
{int i,j;
38+
int parent[6]={-1};
39+
int max_flow=0,flow=1000;
40+
41+
while(bfs(0,parent))
42+
{for(i=5;i!=0;i=parent[i])
43+
{j=parent[i];
44+
flow=min(flow,g[j][i]);
45+
}
46+
47+
for(i=5;i!=0;i=parent[i])
48+
{j=parent[i];
49+
g[j][i]-=flow;
50+
g[i][j]+=flow;
51+
}
52+
max_flow+=flow;
53+
}
54+
55+
return(max_flow);
56+
}
57+
58+
int main()
59+
{ cout << "The maximum possible flow is " << max_flow()<<endl;
60+
return 0;
61+
}

0 commit comments

Comments
 (0)