我对二分图求最大匹配的体会和理解(基于邻接矩阵和dfs)

  刚刚学会二分匹配,去杭电acm做了到入门的题,给出链接 http://acm.hdu.edu.cn/search.php?action=listproblem



  接下来谈谈我的理解



              由于这道题给的数据特殊,总是从女孩到男孩,所以我大可以开个二维数组map[i][j],表示 从i到j有一个边,将他赋值为1,



  另外我还需要两个标记数组,used[maxn],这个数组用来判断一个点是不是在交替路上,match[maxn],这个数组用来判断从i顶



点到j顶点的边是不是匹配边。



             按照本题的解题思路,在hungarian()函数,也就是匈牙利函数中,我需要去初始化match数组,因为刚开始肯定都不是匹配边。



然后需要遍历所有的女孩(左边集合元素),然后去初始化used数组,接着调用dfs,如果返回成功,匹配边数加1



            然后是关键的dfs函数,这里搜索的路线一定是交替路,遍历所有男孩(右边集合元素),去判断节点是否被访问过而且从i到j是不是有边,



如果是的话,进行相应操作,返回成功,否则返回失败