http://www.csie.ntnu.edu.tw/~u91029/Matching.html

 

 1 int nx,ny;
 2 int mx[N],my[N];
 3 bool vy[N];
 4 bool g[N][N];
 5 
 6 int decode(int x,int y)   {return x*15+y;}
 7 
 8 bool dfs(int x)
 9 {
10     for(int y=0;y<ny;++y)
11         if(g[x][y] && !vy[y])
12         {
13             vy[y]=1;
14             if(my[y]==-1 || dfs(my[y]))
15             {
16                 mx[x]=y;
17                 my[y]=x;
18                 return 1;
19             }
20         }
21     return 0;
22 }
23 
24 int b_matching()
25 {
26     memset(mx,-1,sizeof(mx));
27     memset(my,-1,sizeof(my));
28     int c=0;
29     for(int x=0;x<nx;++x)
30     {
31         memset(vy,0,sizeof(vy));
32         if(dfs(x))  ++c;
33     }
34     return c;
35 }
 posted on 2014-07-20 13:54  someblue  阅读(287)  评论(0编辑  收藏  举报