匈牙利算法;直接贴来的;理解交替轨的基础上,画图看一下算法流程,发现没有问题;
2010-06-01 22:25
274 查看
#include <stdio.h> #include <string.h> #define MAX 102 long n,n1,match; long adjl[MAX][MAX]; long mat[MAX]; bool used[MAX]; FILE *fi,*fo; void readfile() { fi=fopen("flyer.in","r"); fo=fopen("flyer.out","w"); fscanf(fi,"%ld%ld",&n,&n1); long a,b; while (fscanf(fi,"%ld%ld",&a,&b)!=EOF) adjl[a][ ++adjl[a][0] ]=b; match=0; } bool crosspath(long k) { for (long i=1;i<=adjl[k][0];i++) { long j=adjl[k][i]; if (!used[j]) { used[j]=true; if (mat[j]==0 || crosspath(mat[j])) { mat[j]=k; return true; } } } return false; } void hungary() { for (long i=1;i<=n1;i++) { if (crosspath(i)) match++; memset(used,0,sizeof(used)); } } void print() { fprintf(fo,"%ld",match); fclose(fi); fclose(fo); } int main() { readfile(); hungary(); print(); return 0; } 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/akof1314/archive/2009/08/07/4421262.aspx
hungry()里尚未操作的顶点,它们不可能被匹配,所以循环操作就不可以,不用判断,因为这种情况坚决不可能发生..画图试一下极限情况...
crossPath对一线连得情况直接记录,对于N折线连的将会实现匹配的交错修改.
代码太成熟了...现在大体了解,会用就好.
相关文章推荐
- 匈牙利算法解决指派问题清晰流程
- 匈牙利算法代码及理解
- 基础算法——直接插入排序
- 基础算法-直接插入排序
- 排序算法---基础算法(冒泡排序,快速排序,选择排序,直接插入排序,桶排序)
- 算法基础之----直接选择排序
- java基础—JVM的垃圾算法有哪几种?CMS垃圾回收的基本流程?
- 深入理解uboot 2016 - 基础篇(处理器启动流程分析)
- hdu 2063 过山车(基础二分图匹配匈牙利算法)
- 【基础算法】希尔排序-如何着手理解一个排序算法
- 理解匈牙利算法求二分匹配
- 【基础练习】【二分图匹配】【匈牙利算法】codevs1022 覆盖题解
- OpenCV2入门——core组件之基础画图与算法实现
- 理解redo(6)日志却的流程和直接路径加载的REDO分析
- POJ 1422 Air Raid 及 关于匈牙利算法的理解的小比喻
- 二分图的最大匹配————匈牙利算法(hungary)基础详解。
- 自定义View(一)---View的基础概念、工作流程以及生命周期的理解
- 八大基础算法 自己的通俗理解
- 算法基础-直接插入排序
- 趣味理解匈牙利算法(转载)