二分图匹配--匈牙利算法模板

对二分图一边的每一个点 dfs ,寻找它的所有匹配点,若那个匹配点没有匹配过或匹配的另一半能新找一个点与之匹配,那么就重组后分别匹配,否则不能匹配

 1 int dfs(int k)

 2 {

 3      for(int i=head[k];~i;i=next[i]) 

 4      if(!visit[point[i]]){

 5            int p=point[i];

 6            visit[p]=1;

 7            if(match[p]==-1||dfs(match[p])){

 8                 match[p]=k;

 9                 return 1;

10            }

11      }

12      return 0;

13 }

14 

15 for(i=1;i<=M;i++){

16       memset(visit,0,sizeof(visit));

17      if(dfs(i)==1)ans++;

18 }
View Code

 

你可能感兴趣的:(二分图)