摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2063#include#include#include#define maxn 1000//表示x集合和y集合中顶点的最大个数! int nx,ny;//x集合和y集合中顶点的个数 int edge[maxn][maxn];//edge[i][j]为1表示ij可以匹配 int cx[maxn],cy[maxn];//用来记录x集合中匹配的y元素是哪个! int visited[maxn];//用来记录该顶点是否被访问过! int path(int u) { int v; for(v=0;v%d... 阅读全文
posted @ 2013-08-26 20:19 执着追求的IT小小鸟 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 匈牙利算法是解决寻找二分图最大匹配的。(一)预备知识 什么是二分图:二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。 什么是匹配:把上图想象成3男4女搞对象(无同性恋),连线代表彼此有好感,但最终只能1夫1妻,最终的配对结果连线就是一个匹配。匹配可以是空。 什么是最大匹配:在有好感的基础上,能够最多发展几对。 现在要用匈牙利算法找出最多能发展几对。[color=green][size=medi 阅读全文
posted @ 2013-08-26 17:03 执着追求的IT小小鸟 阅读(268) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1068这题是模板题。题目大意:给你每个人互相认识的人,然后问最多能找到多少个人都互不认识。其实就是找:最大独立集合!已知:二分图最大独立集合 = 节点数 - 最大匹配数而:最大匹配数=最大匹配 / 2。用匈牙利算法先算出最大匹配,然后就可以解了。对于这个算法,每次找到增广路后,只需记录cy,就y集合中对应的x元素,因为每次查找都是从x开始,这样在深搜过程中就可以判断出下面,即y元素集合中是否已经被匹配了,无需cx,cy都记录。#include#include#include#define maxn 1000/ 阅读全文
posted @ 2013-08-26 17:02 执着追求的IT小小鸟 阅读(202) 评论(0) 推荐(0) 编辑