zoukankan      html  css  js  c++  java
  • 二分图最大匹配——匈牙利算法

    其实所谓的“反色”就是改变mat的标记,mat其实不是叫路径(当然在增广的过程中)它的确起到了“记录前驱”的作用,但是,每趟增广之后,其实他代表的就是匹配
    例如 1和6匹配 那么mat[1]=6; mat[6]=1; 它不是前驱的作用
    所以严格来讲,增广的过程,是回到它之前的匹配点mat[i],然后要mat[i]重新找一个匹配点,只要能找到一个就立即记录并返回不要再找了,如果这个找不到了,那么其实已经
    找不到增广路了
    所以对于一个新的起点A,它一定能找到一个匹配点B(除非它是一个孤立点一条边都没有),如果还没有被匹配过,那么它就据为己有,如果已经被匹配了,那么它还是据为己有,并且强行要求B之前的匹配点C另外找一个匹配点D。

    而C找D的方法和A的方法是一样的,也就是说,C另外找的那个D如果没被匹配过,那么C据为己有,如果有了,还是据为己有,并且要求D之前的匹配点E去找新的匹配点………………(可以发现这是一个不断迭代的过程)

    接上面的,如果C能找到D(准确来说是这个迭代的过程成功),那么说这次增广成功,并且这次增广结束,
    新的匹配方案就是A-B,C-D(如果还有后续的迭代的话,就继续下去);否则的话,这次增广失败,B还是和原来的c匹配,A匹配失败,它只好找另一个和它相连的点B'',并且重复上面的操作

    在每一递归的时候,若某一层返回了1,那么就会一直返回1,直到主函数中,但是某层返回了0,只是返回到上一层,并且继续寻找另一个匹配点,并且有可能成功,不一定一直返回0直到主函数

  • 相关阅读:
    算法导论2.37答案
    算法导论2.37的算法
    heavy dark读《《暗时间》》
    深入SetOP2函数
    c++标准库都有哪些文件
    c++ sort函数的用法
    深入char转换为int/unsigned int的内部机制分析
    顺序容器之vector
    java的动态代理机制详解
    java.lang.IllegalStateException: Web app root system property already set to different value
  • 原文地址:https://www.cnblogs.com/scau20110726/p/2789794.html
Copyright © 2011-2022 走看看