设为首页 加入收藏

TOP

使用匈牙利算法求解
2014-11-23 22:53:49 来源: 作者: 【 】 浏览:2
Tags:使用 匈牙利 算法 求解

#include

#include

int adj_vex[501][501];

int match[501];

int flag[501];

int find(int v, int n)

{

int i;

for (i = 1; i <= n; i++)

{

if (adj_vex[v][i] == 1 && flag[i] == 0)

{

flag[i] = 1;

if (match[i] == 0 || find(match[i], n) == 1)

{

match[i] = v;

return 1;

}

}

}

return 0;

}

void main()

{

int k, m, n;

int i, j, male, female;

int count;

// freopen("input.txt", "r", stdin);

while (scanf("%d", &k) != EOF && k != 0)

{

scanf("%d%d", &m, &n);

for (i = 1; i <= m; i++)

{

for (j = 1; j <= n; j++)

{

adj_vex[i][j] = 0;

}

}

for (i = 1; i <= k; i++)

{

scanf("%d%d", &male, &female);

adj_vex[male][female] = 1;

}

count = 0;

memset(match, 0, (n + 1)*sizeof(int));

for (i = 1; i <= m; i++)

{

memset(flag, 0, (n + 1)*sizeof(int));

if (find(i, n) == 1)

count++;

}

printf("%d\n",count);

}

}

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇 fork与进程地址空间 下一篇Bone Collector

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: