匈牙利算法demo

本文的代码和思想都是参考自: https://blog.csdn.net/dark_scope/article/details/8880547。该文章对匈牙利算法的思想讲解的非常简单易懂,但是代码给得不是很完整,特此整理一下,给需要的人。

/*
*
* Reference: https://blog.csdn.net/dark_scope/article/details/8880547
*/

#include <iostream>
#include <stdio.h>
#include <memory.h>
using namespace std;

bool line[4][4]={{true, true, false, false}, {false, true, true, false}, {true, true, false, false}, {false, false, true, false}};
bool *used;
int *girl;
const int m = 4;

bool find(int x)
{
    for(int j=0; j<m; j++)
    {    
        if (line[x][j]==true && used[j]==false)      
        {
            used[j]=1;
            if (girl[j] == -1 || find(girl[j])) 
            { 
                girl[j]=x;
                return true;
            }
        }
    }
    return false;
}

int main()
{
    used = new bool[4]{false, false, false, false};
    girl = new int[4]{-1,-1,-1,-1};
    for(int i = 0; i < 4; i++)
    {
        memset(used, 0, 4);
        find(i);
    }

    for(int i = 0; i < 4; i++)
    {
        fprintf(stdout, "girl: %d <----> boy: %d\n", i,  girl[i]);
    }
    delete []girl;
    delete []used;
    return 0;
}

/**terminal****

g++ hungarian.cpp -std=c++11 -o hungarian

./hungarian 

girl: 0 <----> boy: 2
girl: 1 <----> boy: 0
girl: 2 <----> boy: 1
girl: 3 <----> boy: -1

*/

 

posted @ 2019-04-12 21:49  walter_xh  阅读(397)  评论(0编辑  收藏  举报