poj 图相关之3041 Asteroids

来源:互联网 发布:基于java的2048小游戏 编辑:程序博客网 时间:2024/06/16 02:12

poj 图相关之3041 Asteroids
第一次接触匈牙利算法,可以参考博客:
http://blog.csdn.net/dark_scope/article/details/8880547

而这道题把每一个坐标的横纵坐标看做是二分图的左右两边,问题就转化为了求最小点覆盖数=最大匹配数

#include<iostream>#include<cstdio>#include<cstring>#define MAXNUM 505using namespace std;bool map[MAXNUM][MAXNUM], vis[MAXNUM];int link[MAXNUM], N, K, ans;bool dfs(int x){    int i, j;    for (i = 1; i <= N; i++)    {        if (!vis[i] && map[x][i])        {            vis[i] = 1;            if (link[i] == 0 || dfs(link[i]))            {                link[i] = x;                return true;            }        }    }    return false;}void search(void){    int i, j;    for (i = 1; i <= N; i++)    {        memset(vis, 0, sizeof(vis));        if (dfs(i))            ans++;    }}int main(void){    int i, j, a, b;    scanf("%d%d", &N, &K);    memset(map, 0, sizeof(map));    memset(link, 0, sizeof(link));    for (i = 0; i < K; i++)    {        scanf("%d%d", &a, &b);        map[a][b] = true;    }    ans = 0;    search();    printf("%d\n", ans);}
原创粉丝点击