二分匹配 最大的匹配数 (简单)
2014-07-31 09:23
330 查看
其实像这个求最大的匹配数的代码还是蛮简单的, 如果你会网络流那么理解起来更加方便了,不懂也没事,你可以自己画一张简单的图,把下面的过程模拟一遍 ,就知道是怎么求找了。下面的代码给出了详细的解释。
<span style="font-size:18px;">#include #include using namespace std ; #define MAXN 100 bool visit[MAXN] ;//这个数组的目的 是来标记那些点已经被访问过了。 int map[MAXN][MAXN] ; //用来记录左右两边两个点的的关系。 int linker[MAXN] ;//用来放那些点已经被连接了 。 int n , m , T ;//分别表示左边与右边的点的数量 void init(){ //初始化 memset(map , 0 , sizeof(map)) ; memset(linker , -1 ,sizeof(linker)) ; scanf("%d%d%d" , &n, &m ,&T) ; //输入那些点是有联系的 while(T--){ int x , y ; scanf("%d%d" ,&x , &y ) ; map[x][y] = 1 ; } } int DfsFind( int x ) { int i ; for(i = 1 ; i <= m ;i++){ if(map[x][i] && !visit[i]){ visit[i] = true ; //DfsFind(linker[i]) 这是寻找某点是否有多条边连接,且构成了增广路 。 if(linker[i] == -1 || DfsFind(linker[i]) ){ linker[i] = x ; return true ; } } } return false ; } int main(){ init () ; int i ,cot = 0; for(i = 1 ;i <= n ; i++) { memset(visit , 0 ,sizeof(visit)) ;//这里要注意 visit 每次都要初始化的 if(DfsFind(i)) cot++ ; } printf("%d\n" , cot ) ; return 0 ; }</span>
相关文章推荐
- POJ 1274 The Perfect Stall 二分匹配||最大流(简单题)
- POJ1274 The Perfect Stall 简单最大二分匹配
- POJ 3216 二分匹配(想到就简单的题) floyed求最短路+匈牙利最大匹配
- 求最大权二分匹配的KM算法
- 用PHP实现简单的反向最大匹配中文分词(代码)
- 使用正向最大匹配算法实现中文分词简单模型-用trie树实现
- hdu 2063 最大二分匹配,匈牙利算法
- 使用正向最大匹配算法实现中文分词简单模型-用trie树实现
- 08-25 USACO 4.1~4.2 搜索,最大流,二分匹配
- ZOJ 1654 Place the Robots(最大二分匹配)
- 基于最大长度词语匹配的简单的汉语分词方法
- ACM HDU 1083 Courses(二分匹配,最大匹配)
- POJ 1274 The Perfect Stall(最大二分匹配)
- hdu 1068 Girls and Boys(最大独立集,二分匹配)
- POJ 1087 A Plug for UNIX(网络流—最大流(最大二分匹配))
- hdu1045 Fire Net(最大二分匹配)
- TZC Asteroids 【二分最大匹配做】
- 最大流,最大权二分匹配,二分匹配算法模板
- poj 1469 COURSES 最大二分匹配
- hdu 2063 过山车 基础最大二分匹配