???????????C++???
???????????? ???????[ 2012/12/24 10:43:05 ] ????????
???????????
???????ù????????????·?????????????(????????)???????????б??????????????????????????????????·??????
????1????????
??????????????У?????????????????δ??????????????????????δ?????????????????ù???????????б???????????δ??????????????????????????????????????????????????(????????μ?????????????????????????????????γ?????????????)???????н????????????????в????(??????????)??????????(????????????????)???????????????????
????2??????????
????????????п????????????????????????????????·?????????е?????????????????????????????????????????????????б??????????????????????????
??????????
#include <iostream>
#include <queue>
using namespace std;
const int Maxn=100; //????????
int pre[Maxn]; //???????????????
int v[Maxn]; //?????????????????
int g[Maxn][Maxn]; //???????????
int f[Maxn][Maxn]; //??????????????
//??С??????
int min(const int val1??const int val2)
{
return val1<val2 ?val1:val2;
}
//???ù??????????(??????洢)
int maxFlow()
{
int n=0; //n????????
//?????
memset(v??0??sizeof(v));
memset(f??0??sizeof(f));
cin>>n;
int s=0??t=n-1; //s????t????
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
cin>>g[i][j];
int queTop=0; //???е?????
while(true)
{
memset(pre??int(-1)??sizeof(pre));
queue<int> que;
pre[s]=s;
v[s]=0x7fffffff; //?????????
que.push(s);
//?ù?????????????????????·
while(!que.empty())
{
//??????????
queTop=que.front();
que.pop();
for(int i=0;i<n;++i)
{
if(pre[i]<0) //С??0???????????
{
//?????
if(g[queTop][i]>f[queTop][i])
{
v[i]=min(g[queTop][i]-f[queTop][i]??v[queTop]); //???????????????
pre[i]=queTop; //???????
que.push(i);
}
//?????
if(f[i][queTop]>0)
{
v[i]=min(f[i][queTop]??v[queTop]);
pre[i]=queTop+n; //?????pre??????????queTop???n??????????????
//?ж???????????????
que.push(i);
}
}
}
//??????????????????????????????????????????????????
if(pre[t]>=0) break;
}
if(pre[t]<0) break; //????????????·????????????????
//????????????
int p=0??q=t;
int minval=v[t];
//??????????minval???е???
while(q!=s)
{
p=pre[q];
if(p>=n)
{
p-=n;
f[q][p]-=minval;//???????????????
}
else
f[p][q]+=minval;//????????????????
q=p;
}
}
//????????????
queTop=0;
for(int i=0;i<n;++i)
queTop+=f[s][i];
return queTop;
}
int main()
{
cout<<maxFlow()<<endl;
}
????????http://blog.csdn.net/iqrocket/article/details/8350558
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11