zoukankan      html  css  js  c++  java
  • 二分图匹配(匈牙利算法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 }
  • 相关阅读:
    P4611 [COCI2011-2012#7] TRAMPOLIN
    P3119 [USACO15JAN]草鉴定Grass Cownoisseur
    P4417 [COCI2006-2007#2] STOL
    P4645 [COCI2006-2007 Contest#3] BICIKLI
    P1155 双栈排序
    P4610 [COCI2011-2012#7] KAMPANJA
    P4329 [COCI2006-2007#1] Bond
    EZOJ #227
    EZOJ #226
    p4980 polya定理
  • 原文地址:https://www.cnblogs.com/redlight/p/2477643.html
Copyright © 2011-2022 走看看