一般图最大匹配的匈牙利算法

来源:互联网 发布:嘉兴菜鸟网络招聘岗位 编辑:程序博客网 时间:2024/05/22 07:40

思想:和二分图的匈牙利算法思想一样点击打开链接


代码:(邻接表实现)

int V;//顶点数vector<int> G[max_v];//图的邻接表表示int match[max_v];//所匹配的顶点bool used[max_v];//DFS中用到的访问标记//向图中增加一条连接u和v的边void add_edge(int u,int v){         G[u].push_back[v];         G[v].push_back[u];}//通过DFS寻找增广路bool dfs(int v){         used[v]=true;         for(int i=0;i<G[v].size();i++)         {                   int u=G[v][i],w=match[u];                   if(w<0||!used[w]&&dfs(w))                   {                              match[v]=u;                              match[u]=v;                              return true;                    }          }          return false;}//求解二分图的最大匹配int bipartite_matching(){         int res=0;         memset(match,-1,sizeof(match));         for(int v=0;v<V;v++)         {                  if(match[v]<0)                  {                            memset(used,0,sizeof(used));                            if(dfs(v))                            {                                       res++;                             }                   }         }         return res;}
原创粉丝点击