hdu 2819 Swap 二分图的最大匹配
来源:互联网 发布:阿里云 淘宝账号 编辑:程序博客网 时间:2024/05/23 19:12
//hdu 2819//直接按照给定的矩阵建图//判断匹配是否能达到n//然后选择排序确定交换顺序。#include<cstdio>#include<cstring>#include<iostream>using namespace::std;const int INF=0x7fffffff;const int N=110;int g[N][N];int L[N],R[N];struct Hungary{ int used[N],line[N]; void init(){ memset(line,-1,sizeof(line)); } bool find(int u,int n){ for(int i=0;i<n;i++){ if(g[u][i]&&!used[i]){ used[i]=true; if(line[i]==-1||find(line[i],n)){ line[i]=u; return 1; } } } return 0; } int Max_match(int n){ int all=0; for(int i=0;i<n;i++){ memset(used,0,sizeof(used)); if(find(i,n))all+=1; } return all; }};Hungary huy;int main(){ int n; while(scanf("%d",&n)!=EOF){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ scanf("%d",&g[i][j]); } } huy.init(); int ans=huy.Max_match(n); if(ans<n){ printf("-1\n"); } else{ int cnt=0; for(int i=0;i<n;i++){//选择排序 for(int j=0;j<n&&huy.line[i]!=i;j++){ if(huy.line[j]==i){ L[++cnt]=i;R[cnt]=j; swap(huy.line[i],huy.line[j]); break; } } } printf("%d\n",cnt); for(int i=1;i<=cnt;i++) printf("C %d %d\n",L[i]+1,R[i]+1); } } return 0;}
0 0
- HDU 2819 Swap 二分图最大匹配
- HDU-2819 swap(二分图最大匹配)
- HDU 2819 Swap(最大二分图匹配)
- hdu 2819 Swap 二分图的最大匹配
- HDU 2819 Swap(二分图最大匹配)
- hdu 2819 Swap(二分图最大匹配,输出路径)
- HDU 2819 Swap (最大二分匹配+输出路径)
- 小白算法练习 hdu swap 二分图 最大匹配
- hdu 2819 Swap 二分图匹配
- hdu-2819 Swap 二分图匹配
- HDU 2819 Swap(二分图匹配)
- Swap - HDU 2819 二分图匹配
- hdu 2819 Swap(二分图匹配)
- hdu 2819 Swap (二分图匹配)
- 【图论】【二分图匹配】[HDU 2819]Swap
- hdu 2819 Swap(二分图匹配)
- hdu 2819 Swap [二分图匹配]
- HDU 2819 Swap 二分匹配
- HDOJ 1094 A+B for Input-Output Practice (VI)(水题)
- 孪生素数问题
- poj 2594 二分图最大匹配最小路径覆盖
- MYSQL 命令控制符操作语句
- 黑马程序员——Java IO总结一
- hdu 2819 Swap 二分图的最大匹配
- Mac下git命令自动补全
- GCD队列与任务
- HDU5297莫比乌斯函数,容斥原理从1到n中数字中去掉形如a^r的数字
- Android Scroller简单用法
- P-Called-Party-ID头域
- 析构函数什么情况下要定义为虚函数?
- HDOJ 1095 A+B for Input-Output Practice (VII)(水题)
- 已知两种遍历序列求原始二叉树