二分图匈牙利算法模板

原创 2016年05月31日 20:13:57

想看更多模板,请点击:http://blog.csdn.net/martinue/article/category/6268283

最大匹配数:最大匹配的匹配边的数目

最小点覆盖数:选取最少的点,使任意一条边至少有一个端点被选择

最大独立数:选取最多的点,使任意所选两点均不相连

最小路径覆盖数:对于一个 DAG(有向无环图),选取最少条路径,使得每个顶点属于且仅属于一条路径。路径长可以为0(即单个点)。

定理1:最大匹配数 = 最小点覆盖数(这是 Konig 定理)

定理2:最大匹配数 = 最大独立数

定理3:最小路径覆盖数 = 顶点数 - 最大匹配数


const int N=555;///两边的最大数量
bool tu[N][N];
int from[N];///记录右边的点如果配对好了它来自哪里
bool use[N];///记录右边的点是否已经完成了配对
int n,m;///m,n分别表示两边的各自数量,n是左边,m是右边
bool dfs(int x)
{
    for(int i=1;i<=m;i++)///m是右边,所以这里上界是m
    if(!use[i]&&tu[x][i])
    {
        use[i]=1;
        if(from[i]==-1||dfs(from[i]))
        {
            from[i]=x;
            return 1;
        }
    }
    return 0;
}
int hungary()
{
    int tot=0;
    memset(from,-1,sizeof(from));
    for(int i=1;i<=n;i++)///n是左边,所以这里上界是n
    {
        memset(use,0,sizeof(use));
        if(dfs(i))
            tot++;
    }
    return tot;
}

也可以改写成vector版本的,方法比较灵活。



版权声明:本文为博主原创文章,若转载请注明转载地址http://blog.csdn.net/martinue。

二分图完备匹配(匈牙利算法)

  • 2010年01月12日 10:45
  • 2KB
  • 下载

二分图匹配学习——匈牙利算法模板

DFS(邻接矩阵) const int MAXN=1000; int p,n; //u,v数目 int g[MAXN][MAXN];//左右集合连接情况 int linker[MAXN]; boo...
  • YJX_xx
  • YJX_xx
  • 2015年08月10日 20:36
  • 308

二分图最大匹配匈牙利算法(poj)3041(模板)

概念: 最大匹配:

透彻解析二分图最大匹配匈牙利算法模板

/*===========================================================*\ G为图,M为图中的一个匹配,从X集合到Y集合找一个最大匹配 交互道路:对...

二分图的匈牙利算法 HDU 2063(裸模板,待增加)

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis...

hdu2063二分图(匈牙利算法模板)

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis...

用匈牙利算法求二分图的最大匹配

  • 2011年08月08日 08:29
  • 1.05MB
  • 下载

二分图匹配匈牙利算法(DFS, BFS两种实现模板)

3个重要结论: 最大匹配数:最大匹配的匹配边的数目 最小点覆盖数:选取最少的点,使任意一条边至少有一个端点被选择 最大独立集:选取最多的点,使任意所选两点均不相连 最小路径覆盖数:对于一个...

匈牙利算法(二分图模板)

匈牙利算法:   #define N 1111 int vx,vy; ///二分图的顶点集合 int graph[N][N]; ///邻接矩阵 int link[N]; ///标记vy中的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二分图匈牙利算法模板
举报原因:
原因补充:

(最多只允许输入30个字)