• 二分图匹配(匈牙利算法DFS实现)


    INIT :g[][] 邻接矩阵

    CALL:res=MaxMatch();

    时间复杂度为o(VE)

    下面是二分图最大匹配的简单题(poj1274的代码),做出邻接矩阵后可以直接调用MaxMatch()函数使用:

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 using namespace std;
     5 
     6 const int MAXN=202;
     7 int uN,vN;//u,v数目,需要初始化 
     8 bool g[MAXN][MAXN];//g[i][j]表示xi与yj相连,也就是要初始化的邻接矩阵 
     9 int xM[MAXN],yM[MAXN];//输出量 
    10 bool chk[MAXN];//辅助检查某轮y[v]是否被check 
    11 
    12 bool SearchPath(int u)
    13 {
    14     int v;
    15     for(v=0;v<vN;++v)
    16     {
    17         if(g[u][v] && !chk[v])
    18         {
    19             chk[v]=true;
    20             if(yM[v]==-1 || SearchPath(yM[v]))
    21             {
    22                 yM[v]=u;
    23                 xM[u]=v;
    24                 return true;
    25             }
    26         }
    27     }
    28     return false;
    29     
    30 }
    31 
    32 int MaxMatch()
    33 {
    34     int u,ret=0;
    35     memset(xM,-1,sizeof(xM));
    36     memset(yM,-1,sizeof(yM));
    37     for(u=0;u<uN;++u)
    38     {
    39         if(xM[u]=-1)
    40         {
    41             memset(chk,false,sizeof(chk));
    42             if(SearchPath(u)) ret++;
    43         }
    44     }
    45     return ret;
    46 }
    47 
    48 int main()
    49 {
    50     int x,y;
    51     while(scanf("%d%d",&uN,&vN)!=EOF)
    52     {
    53          memset(g,false,sizeof(g));//注意这里每次要初始化 
    54         for(int i=0;i<uN;++i)
    55         {
    56              cin>>x;
    57              for(int j=0;j<x;++j)
    58              {
    59                  cin>>y;
    60                  g[i][y-1]=true;
    61              }
    62          }
    63          cout<<MaxMatch()<<endl;
    64     }
    65     //system("pause");
    66     return 0;
    67 }
  • 相关阅读:
    优步合肥上线首日引发试乘热行程单破万
    全北京都在开优步,你还在开那啥?
    freemarker常见语法大全
    Freemarker入门案例
    管理和感悟文章
    人不成熟的几大特征
    hadoop面试题一
    文章收集
    Java:基于LinkedList实现栈和队列
    JQuery上传插件Uploadify API详解
  • 原文地址:https://www.cnblogs.com/redlight/p/2477643.html
Copyright © 2020-2023  润新知