二分匹配匈牙利算法
2010-05-31 20:47
218 查看
#define parray 101
#define narray 301
int map[parray][narray]; //存储邻接矩阵
int match[narray]; //存储匹配
bool final[narray]; //用于标记DFS
int p,n; //p代表二分图左半顶点个数,n代表二分图右半顶点个数
//利用DFS算法找增广路路径
bool DFS(int p)
{
int i,t;
for(i=1;i<=n;++i)
{
if(map[p][i] && !final[i])
{
final[i]= true;
t = match[i];
match[i] = p;
if(t==0 || DFS(t)) return true; //由二分图中的增广路径的性质可知,起点和终点都是目前还没有配对的点,而其它所有点都是已经配好对的。
match[i] = t; //注意二分匹配时不必在此处回溯时改变final的值,如果从一个点A出发,没有找到增广路径,那么无论再从别的点出发找到多少增广路径来改变现在的匹配,从A出发都永远找不到增广路径。
}
}
return false;
}
int mat()
{
int i,j;
int maxmatch = 0; //最大匹配数
for(i=1;i<=p;++i) //遍历二分图左半边的每个顶点,寻找增广路径
{
memset(final,0,sizeof(final)); //每次找寻增广路径时final初始化
if(DFS(i)) maxmatch++;
}
return maxmatch;
}
int main()
{
scanf("%d%d",&p,&n);
memset(map,0,sizeof(map)); //初始化邻接矩阵
memset(match,0,sizeof(match)); //初始化匹配
mat();
return 0;
}
#define narray 301
int map[parray][narray]; //存储邻接矩阵
int match[narray]; //存储匹配
bool final[narray]; //用于标记DFS
int p,n; //p代表二分图左半顶点个数,n代表二分图右半顶点个数
//利用DFS算法找增广路路径
bool DFS(int p)
{
int i,t;
for(i=1;i<=n;++i)
{
if(map[p][i] && !final[i])
{
final[i]= true;
t = match[i];
match[i] = p;
if(t==0 || DFS(t)) return true; //由二分图中的增广路径的性质可知,起点和终点都是目前还没有配对的点,而其它所有点都是已经配好对的。
match[i] = t; //注意二分匹配时不必在此处回溯时改变final的值,如果从一个点A出发,没有找到增广路径,那么无论再从别的点出发找到多少增广路径来改变现在的匹配,从A出发都永远找不到增广路径。
}
}
return false;
}
int mat()
{
int i,j;
int maxmatch = 0; //最大匹配数
for(i=1;i<=p;++i) //遍历二分图左半边的每个顶点,寻找增广路径
{
memset(final,0,sizeof(final)); //每次找寻增广路径时final初始化
if(DFS(i)) maxmatch++;
}
return maxmatch;
}
int main()
{
scanf("%d%d",&p,&n);
memset(map,0,sizeof(map)); //初始化邻接矩阵
memset(match,0,sizeof(match)); //初始化匹配
mat();
return 0;
}
相关文章推荐
- 匈牙利算法-最大二分匹配
- HDU2063-过山车(二分匹配 +匈牙利算法)
- POJ3041《Asteroids》方法:匈牙利算法(最小点覆盖数==最大二分匹配数)
- 二分匹配(匈牙利算法)
- 二分匹配,匈牙利算法
- hdu4619 Warm up 2 二分匹配 匈牙利算法(再一发)
- hdu3360+二分匹配(匈牙利算法)
- HDU2444 The Accomodation of Students(二分匹配 匈牙利算法)
- 二分匹配 ---- 匈牙利算法
- 关于匈牙利算法+二分匹配和KM算法的链接
- hdu 3729 I'm Telling the Truth(二分匹配_ 匈牙利算法)
- HDU 2063:过山车(二分匹配,匈牙利算法)
- uva11419 【最大二分匹配求最小点覆盖 匈牙利算法】
- 理解匈牙利算法求二分匹配
- POJ 2536 二分匹配 匈牙利算法 || 网络流
- hdu 1068 二分匹配 匈牙利算法
- HDU 2444 The Accomodation of Students(最大二分匹配(匈牙利算法)+二分图判断->模板题目)
- HDU 1068 Girls and Boys(二分匹配--匈牙利算法)
- HDU1179(二分匹配(匈牙利算法))
- HDU 2236 无题II(二分匹配模板题,匈牙利算法)