匈牙利算法
2014-08-03 23:15
141 查看
#include <stdio.h> #include <string.h> # include <fstream> # include <iostream > #define len 510 using namespace std; int map[len][len]; int used[len]; int link[len]; int n; int dfs(int a) { int i; cout<<a<<"节点开始dfs\n"; for(i=1;i<=n;i++) { if(!used[i]&&map[a][i]) { cout<<i<<"节点没有被使用过,且"<<i<<"节点与"<<a<<"节点相连\n"; used[i]=1; cout<<i<<"节点标记为用过\n"; if(link[i]==-1||dfs(link[i])) { cout<<"把"<<i<<"节点连着的标记为"<<a<<endl; link[i]=a; return 1; } } } return 0; } int main() { ifstream cin("xiongyali.txt"); int a,b,m,sum,i; while(cin>>n>>m) { memset(map,0,sizeof(map)); memset(link,-1,sizeof(link)); while(m--) { cin>>a>>b; map[a][b]=1; } sum=0; for(i=1;i<=n;i++) { memset(used,0,sizeof(used)); if(dfs(i)){ sum++; cout<<"sum加1"<<endl; } } printf("%d\n",sum); } return 1; } //xiongyali.txt测试数据如下 /* 6 6 1 4 1 5 2 4 2 6 3 4 3 6 即6个节点6条边,下面六行显示着哪个与哪个相连~ /*
不断找增广边,扩展。
有如下几个关系
不存在孤立点的图,|最大匹配|+|最小边覆盖|=|V|
|最大独立集|+|最小顶点覆盖|=|V|
对于二分图,|最大匹配| = |最小丁点覆盖|
相关文章推荐
- poj_3041 Asteroids(匈牙利算法+最小点覆盖)
- 【模板】匈牙利算法
- 匈牙利算法和km算法
- poj 3020 Antenna Placement(最小路径覆盖 + 匈牙利算法)
- 匈牙利算法
- 匈牙利算法
- 过山车 hdu2063 匹配、匈牙利算法起步&&最大流
- Pku acm 1274 The Perfect Stall 数据结构题目解题报告(十三)---- 匈牙利算法求二分图的最大匹配
- (算法)二分图的最大匹配(匈牙利算法)
- HDU 4185 Oil Skimming(二分匹配,匈牙利算法)
- HD-2063 匈牙利算法解决二分图问题
- AtCoder Regular Contest 080 F - Prime Flip 线性筛+匈牙利算法
- POJ3041 最小点覆盖 最大匹配数 回顾匈牙利算法
- hdu1281.cpp(匈牙利算法)
- HDU 2063 过山车(匈牙利算法模板)
- 二分图与匈牙利算法
- bzoj 1191 匈牙利算法 二分图匹配
- zzulioj-1918-G【匈牙利算法】【二分匹配】
- 用匈牙利算法求二分图的最大匹配
- Poj1325 Machine Schedule 最大二分图匹配 匈牙利算法