FordFulkerson 最大流问题

#include<iostream>using namespace std;#define MAXN 10000003int n,sink;bool Vis[100];__int64 C[100][100],F[100][100];struct list{int value;bool dir;};struct stack{int top;list node[100];}f;bool DFS(int x){if(x==sink){f.top=0;return true;}Vis[x]=1;for(int i=0;i<n;i++){if(Vis[i]==0){if(F[x][i]<C[x][i])if(DFS(i)){f.node[f.top].value=i;f.node[f.top].dir=1;f.top++;return true;break;}if(F[i][x]>0)if(DFS(i)){f.node[f.top].value=i;f.node[f.top].dir=0;f.top++;return true;break;}}}return false;}void Solve(){int start;memset(Vis,0,sizeof(Vis));cin>>n;for(int i=0;i<n;i++)for(int j=0;j<n;j++)cin>>C[i][j];memset(F,0,sizeof(F));cin>>start>>sink;while(DFS(start)){f.node[f.top].value=0;__int64 Min=MAXN;for(int i=0;i<f.top;i++){if(f.node[i].dir==1)Min=min(Min,C[ f.node[i+1].value] [f.node[i].value]-F[ f.node[i+1].value] [f.node[i].value]);elseMin=min(Min, F[f.node[i].value][ f.node[i+1].value] );}for(int i=0;i<f.top;i++){if(f.node[i].dir==1)F[ f.node[i+1].value] [f.node[i].value]+=Min;if(f.node[i].dir==0)F[f.node[i].value][ f.node[i+1].value]-=Min;}memset(Vis,0,sizeof(Vis));}for(int i=0;i<n;i++){for(int j=0;j<n;j++)cout<<F[i][j]<<" ";cout<<endl;}}int main(){Solve();return 0;}

,环境不会改变,解决之道在于改变自己。

FordFulkerson 最大流问题

相关文章:

你感兴趣的文章:

标签云: