To Solve the Maximum Flow Problem,sample code is as the following: #include "stdio.h" #include "stdlib.h" #include "string.h" #define MAX 203 #define INF 200 int n,np,nc,m,u,v,z,f[MAX][MAX],c[MAX][MAX],e[MAX],h[MAX],s,t; char ch; int input() { memset(c,0,sizeof(c)); memset(f,0,sizeof(f)); s=n;t=n+1; for (int i=0;i<m;i++) { do{scanf("%c",&ch);}while(ch!='('); scanf("%d",&u); do{scanf("%c",&ch);}while(ch!=','); scanf("%d",&v); do{scanf("%c",&ch);}while(ch!=')'); scanf("%d",&z); c[u][v]=z; } for (int i=0;i<np;i++) { do{scanf("%c",&ch);}while(ch!='('); scanf("%d",&u); do{scanf("%c",&ch);}while(ch!=')'); scanf("%d",&z); c[s][u]=z; } for (int i=0;i<nc;i++) { do{scanf("%c",&ch);}while(ch!='('); scanf("%d",&u); do{scanf("%c",&ch);}while(ch!=')'); scanf("%d",&z); c[u][t]=z; } for (int i=0;i<n+2;i++) { for (int j=0;j<n+2;j++) { printf("%d/t",c[i][j]); } printf("/n"); } printf("**************************/n"); return 0; } int init_preflow() { memset(h,0,sizeof(h)); memset(e,0,sizeof(e)); h[s]=n+2; for (int i=0;i<n+2;i++) { if (c[s][i]>0) { f[s][i]=c[s][i]; f[i][s]=-f[s][i]; e[i]+=f[s][i]; e[s]-=f[s][i]; } } return 0; } int push(int u,int v) { int d; d = e[u]<c[u][v]-f[u][v]?e[u]:c[u][v]-f[u][v]; f[u][v]+=d; f[v][u]=-f[u][v]; e[v]+=d; e[u]-=d; return 0; } int relabel(int u) { int mh; mh=INF; for (int i=0;i<n+2;i++) { if (c[u][i]>f[u][i]) mh = mh<h[i]?mh:h[i]; } if (mh == INF) return 0; h[u]=mh+1; for (int i=0;i<n+2;i++) { if (e[u]==0)break; if (mh == h[i] && c[u][i]>f[u][i]) push(u,i); } return 1; } int push_relabel() { int flag = 1; init_preflow(); while (flag) { flag = 0; for (int i=0;i<n;i++) { if (e[i]>0) flag = flag ||relabel(i); } } return 0; } int main() { freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); while (scanf("%d%d%d%d",&n,&np,&nc,&m)!=EOF) { input(); push_relabel(); printf("%d/n",e[t]); } return 0; }