随笔 - 87  文章 - 279  trackbacks - 0
<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

潜心看书研究!

常用链接

留言簿(19)

随笔分类(81)

文章分类(89)

相册

ACM OJ

My friends

搜索

  •  

积分与排名

  • 积分 - 214376
  • 排名 - 116

最新评论

阅读排行榜

评论排行榜

算法轮廓:
(1)置M为空
(2)找出一条增广路径P,通过取反操作获得更大的匹配M’代替M
(3)重复(2)操作直到找不出增广路径为止
V2:

#include  < iostream >
#include 
< fstream >  
using   namespace  std;

const   int  MAXN  =   100 ;
int  uN, vN;   // u,v数目 
bool  g[MAXN][MAXN]; // g[i][j] 表示 xi与yj相连 
int  xM[MAXN], yM[MAXN];  //  输出量 
bool  chk[MAXN];  // 辅助量 检查某轮 y[v]是否被check 



bool  SearchPath( int  u)
{
    
int  v;
    
for  (v = 0 ; v < vN; v ++ )
    
{
        
if  (g[u][v]  &&   ! chk[v])
        
{
            chk[v] 
=   true ;
            
if  (yM[v]  ==   - 1   ||  SearchPath(yM[v])) 
            
{
                yM[v] 
=  u;
                xM[u] 
=  v;
                
return   true ;
            }

        }

    }

    
return   false ;
}



int  MaxMatch()
{
    
int  u;
    
int  ret  =   0 ;
    memset(xM, 
- 1 sizeof (xM));
    memset(yM, 
- 1 sizeof (yM));
    
for  (u = 0 ; u < uN; u ++ )
    
{
        
if  (xM[u]  ==   - 1 )
        
{
            memset(chk, 
false sizeof (chk));
            
if  (SearchPath(u)) ret ++ ;
        }

    }

    
return  ret;
}


int  main()
{
    
int  i, k; 
    
int  tU, tV;
    ifstream cin(
" test.txt " );
    cin 
>>  uN  >>  vN  >>  k;
    memset(g, 
false sizeof (g));
    
for  (i = 0 ; i < k; i ++ )
    
{
        cin 
>>  tU  >>  tV;
        g[tU][tV] 
=   true ;
    }
 
    
int  M  =   MaxMatch();
    cout 
<<   " Total Match:  "   <<  M  <<  endl;
    
for  (i = 0 ; i < MAXN; i ++ )
        
if  (xM[i]  !=   - 1 )
            cout 
<<  i  <<   '   '   <<  xM[i]  <<  endl;
    system(
" pause " );
    
    
return   0
}
 


/* **********
test data:
    3 3 3
    1 1
    1 0
    2 2
**********
*/


 

posted on 2006-10-01 02:15 阅读(4285) 评论(7)  编辑 收藏 引用 所属分类: 数据结构与算法

FeedBack:
# re: 二分图最大匹配(匈牙利算法) 2006-10-18 21:07 youyou
Total Match :0.
这个是运行结果吗?  回复  更多评论
  
# re: 二分图最大匹配(匈牙利算法) 2006-10-18 21:21 
嗯  回复  更多评论
  
# re: 二分图最大匹配(匈牙利算法) 2008-02-28 15:24 txj
求二分图最大匹配(匈牙利算法)的java代码  回复  更多评论
  
# re: 二分图最大匹配(匈牙利算法) 2008-08-04 18:38 beaming
这个代码是不是有点问题  回复  更多评论
  
# re: 二分图最大匹配(匈牙利算法) 2008-08-12 22:45 k
代码有问题啊 过不了poj1469的样例啊  回复  更多评论
  
# re: 二分图最大匹配(匈牙利算法) 2009-12-02 11:20 icuiliang
明明是从文件中读的您还使用cin...  回复  更多评论
  
# re: 二分图最大匹配(匈牙利算法) 2010-03-12 16:31 纳米
@icuiliang
ifstream cin( " test.txt " );  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理