The Hungarian algorithm Template

The Hungarian algorithm with The adjacency matrix :

计算最大匹配问题

int n1, n2, m, ans;
int res[MAXN];
bool vis[MAXN], map[MAXN][MAXN];

void init(){
    int t1, t2;
    memset(map, 0, sizeof(map));
    memset(res, 0, sizeof(res));
    ans = 0;
    scanf("%d%d",&n1,&n2);

    //get map[][]

}
bool find(int a) {
    for (int i = 1; i <= n2; ++i) {
        if (map[a][i] == 1 && !vis[i]) {
            vis[i] = true;
            if (res[i] == 0 || find(res[i])) {
                res[i] = a;
                return true;
            }
        }
    }
    return false;
}
int main() {
    init();
    for (int i = 1; i <= n1; ++i) {
        memset(vis, 0, sizeof(vis));
        if (find(i)) ++ans;
    }
    printf("%d\n",ans);
    return 0;
}    

时间: 2024-07-28 21:55:56

The Hungarian algorithm Template的相关文章

algorithm之改变序列算法

简述:改变序列算法,参见http://www.cplusplus.com/reference/algorithm/?kw=algorithm /* template <class BidirectionalIterator, class UnaryPredicate> BidirectionalIterator partition (BidirectionalIterator first, BidirectionalIterator last, UnaryPredicate pred); Pa

微软等数据结构+算法面试100题全部答案集锦

1.把二元查找树转变成排序的双向链表. 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. 要求不能创建任何新的结点,只调整指针的指向. 10  / \  6 14  / \ / \  4 8 12 16 转换成双向链表 4=6=8=10=12=14=16. 首先我们定义的二元查找树节点的数据结构如下: struct BSTreeNode  {  int m_nValue; // value of node  BSTreeNode *m_pLeft; // left child

Motion-Based Multiple Object Tracking

kalman filter tracking... %% Motion-Based Multiple Object Tracking % This example shows how to perform automatic detection and motion-based % tracking of moving objects in a video from a stationary camera. % % Copyright 2014 The MathWorks, Inc. %% %

GMM+Kalman Filter+Blob 目标跟踪

转 http://www.cnblogs.com/YangQiaoblog/p/5462453.html ==========图片版============================================================================== ===================================================================================== 最近学习了一下多目标跟踪,看了看Mat

BNUOJ33566 Cycling Roads(并查集+判断两线段相交)

Cycling Roads Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on Ural. Original ID: 1966 64-bit integer IO format: %lld      Java class name: (Any) Prev Submit Status Statistics Discuss Next Font Size:  +   - Type:   None Graph T

BNUOJ33568 Glass Pyramid(DFS)

Glass Pyramid Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on Ural. Original ID: 1968 64-bit integer IO format: %lld      Java class name: (Any) Prev Submit Status Statistics Discuss Next Font Size: +   - Type:   None  Graph T

BNUOJ34980方(芳)格(哥)取数(好坑)

方(芳)格(哥)取数 Time Limit: 3000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: Main Prev Submit Status Statistics Discuss Next Font Size:  +   - Type:   None Graph Theory      2-SAT     Articulation/Bridge/Biconnected Compon

二分图简单概念&amp;&amp;HDU 2063

二分图: 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图. 简单的说,一个图被分成了两部分,相同的部分没有边,那这个图就是二分图,二分图是特殊的图. 匹配: 给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配. 极大匹配(Maximal Ma

漫谈 Clustering (2): k-medoids

上一次我们了解了一个最基本的 clustering 办法 k-means ,这次要说的 k-medoids 算法,其实从名字上就可以看出来,和 k-means 肯定是非常相似的.事实也确实如此,k-medoids 可以算是 k-means 的一个变种. k-medoids 和 k-means 不一样的地方在于中心点的选取,在 k-means 中,我们将中心点取为当前 cluster 中所有数据点的平均值: Rough Collie 并且我们已经证明在固定了各个数据点的 assignment 的情