您的位置:首页 > 其它

关于二分图问题的一些知识

2012-07-21 20:29 218 查看
二分图相关问题:

1、二分图最大匹配 (定义:匹配是二分图中边的集合,且集合中的任意两条边没有公共点,包含边数最多的匹配就是最大匹配)
2、二分图最小覆盖 (寻找一个点集,是的图中每一个边至少有一个点在该边上,即用最少的顶点去覆盖所有的边)
3、二分图最大独立集 (寻找一个点集,其中任意两点在图中无对应边)
4、二分图最小路径覆盖 (用尽量少的不相交简单路径覆盖有向无环图的所有顶点)
5、二分图最优匹配
6、稳定婚姻问题

二分图定义及判定:

定义:二分图中,顶点可以分为两个集合X和Y,每一条边的两个顶点都分别位于X和Y集合中

判定:利用BFS或者DFS进行黑白染色,共享一边的两点异色,检查是否存在矛盾

图G为二分图的充要条件是图中不含奇环

二分图的最大匹配可以用匈牙利算法解决:

int G[maxn][maxn];
int mark[maxn];
bool visit[maxn];
int n,m;
int path(int u)
{
int i;
for(i=1;i<=m;i++)
{
if(G[u][i] && !visit[i])
{
visit[i]=true;
if(mark[i]==-1 || path(mark[i]))
{
mark[i]=u;
return 1;
}
}
}
return 0;
}
int Max_Match()
{
int i,ans;
memset(mark,-1,sizeof(mark));
ans=0;
for(i=1;i<=n;i++)
{
memset(visit,false,sizeof(visit));
if(path(i))
ans++;
}
return ans;
}


1、二分图的最小覆盖=二分图的最大匹配
2、二分图的最大独立集=顶点数-最大匹配
3、二分图的最小路径覆盖解法:每个顶点分为两个,分别在X集合和Y集合中,如果存在有向边(a,b),对应在二分图中有(Xa,Yb),最小路径数=节点数-最大匹配
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: