HDU-2819-Swap [二分匹配][输出路径]
来源:互联网 发布:js中confirm的用法 编辑:程序博客网 时间:2024/05/18 13:29
题目传送门
题意:给定一个只有0 1的矩形,问能否通过交换行列使对角线上的数全为1,如果可以输出交换的路径。
思路:首先通过匈牙利算法算出最大匹配,如果最大匹配数不等于矩阵的行数,则必然不会成功。只交换行,或者只交换列都可以交换出来。
#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <cmath>#include <queue>#include <stack>#include <map>#include <set>using namespace std;int n;bool path[110][110];bool used[110];int match[110];bool Dfs(int x){ for (int i = 1; i <= n; i++) { if (!used[i] && path[x][i]) { used[i]=1; if (!match[i] || Dfs(match[i])) { match[i] = x; return true; } } } return false;}int Matching(){ int ans = 0; memset(match,0, sizeof(match)); for (int i = 1; i <= n; i++) { memset(used, false, sizeof(used)); if (Dfs(i)) { ans++; } } return ans;}int main(void){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); while (~scanf("%d", &n)) { memset(path, false, sizeof(path)); for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { int x; scanf("%d", &x); path[i][j] = x; } } int ans = Matching(); if (ans!=n) { printf("-1\n"); continue; } int L[110], R[110]; int cnt=0; for (int i = 1; i <= n; i++) { if (match[i] != i) { for (int j = 1; j <= n; j++) { if (i==match[j]) { L[cnt] = i; R[cnt] = j; cnt++; swap(match[i], match[j]); break; } } } } printf("%d\n", cnt); for (int i = 0; i < cnt; i++) printf("C %d %d\n", L[i], R[i]); } 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 二分匹配
- hdu2819 Swap 二分图最大匹配 输出路径
- hdoj 2819 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
- 二叉树
- springmvc+spring+mybatis(简单登录)+aop日志管理
- 超分辨率重建之SRCNN
- 中兴新支点命令篇——任务管理命令
- maven三
- HDU-2819-Swap [二分匹配][输出路径]
- Linux文件系统
- 66. Plus One
- 相位相关法phaseCorrelate的一些特点记录
- 美赛数模论文之表的格式
- 竞赛题目讲解-【NOIP2000提高组】乘积最大
- java POI创建Excel示例(xslx和xsl区别 )
- Nutz学习--连接数据库操作
- HDU --6143 Killer Names