poj 3041

来源:互联网 发布:乐外卖是什么软件 编辑:程序博客网 时间:2024/06/02 05:00

匈牙利算法练习

顶点覆盖

行,列匹配。

行列交点处有石头,表明要消去,则建立联系,此后这两点(行,列)无石头,不用再匹配。

#include <iostream>#include <cstdio>#include <cstring>#define Max 500using namespace std;int n,k;int _map[1000][1000];int link[1000],vis[1000];int dfs(int t){    for(int i=0;i<n;i++)    {        if(!vis[i]&&_map[t][i])        {            vis[i]=1;            if(link[i]==-1||dfs(link[i]))            {                link[i]=t;                return 1;            }        }    }    return 0;}int hungery(){    int num=0;    for(int i=0;i<n;i++)    {        memset(vis,0,sizeof(vis));        if(dfs(i))        {            num++;        }    }    return num;}int main(){    //freopen("in","r",stdin);    while(scanf("%d%d",&n,&k)!=EOF)    {        memset(_map,0,sizeof(_map));        memset(link,-1,sizeof(link));        for(int i=0;i<k;i++)        {            int a,b;            scanf("%d%d",&a,&b);            _map[a-1][b-1]=1;        }        printf("%d\n",hungery());    }    return 0;}

0 0
原创粉丝点击