题目传送门


题意:给定一个只有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;
}

HDU-2819-Swap [二分匹配][输出路径]相关推荐

  1. hdu 1281棋盘游戏(二分匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1281 Problem Description 小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格 ...

  2. 牛客练习赛30: D. 消消乐(二分匹配+输出最小点覆盖)

    链接:https://ac.nowcoder.com/acm/contest/216/D 来源:牛客网 题目描述 r神在和小b比赛玩一个名为"消消乐"的游戏,在一个n*m的棋盘上, ...

  3. HDU - 2819 Swap(二分图完备匹配+路径输出)

    题目链接:点击查看 题目大意:给出一个n*n的01矩阵,问能否通过数次交换行和列,使得主对角线上的值全部为1 题目分析:因为对角线上的每个元素都对应着不同的一行和一列,换句话说,如果有解,那么肯定可以 ...

  4. HDU 2819 Swap(二分图匹配)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2819 [题目大意] 给出一个棋盘,由白格子和黑格子组成,可以交换棋盘的行列, 使得其主对角线为黑格 ...

  5. hdu 1281 棋盘游戏 (二分匹配)

    棋盘游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  7. SGU 286 Ancient decoration(Euler路径+二分匹配)

    http://acm.sgu.ru/problem.php?contest=0&problem=286 先找欧拉回路,再做二分匹配,输出匹配 有一道题和这个很像:HDU 3551 Hard P ...

  8. 【网络流24题】 No.3 最小路径覆盖问题 (网络流|匈牙利算法 -最大二分匹配)...

    [题意] 给定有向图 G=(V,E).设 P 是 G 的一个简单路(顶点不相交) 的集合.如果 V 中每个 顶点恰好在 P 的一条路上,则称 P 是 G 的一个路径覆盖. P 中路径可以从 V 的任何 ...

  9. hdu 1054 Strategic Game 最小点覆盖 = 最大二分匹配

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1054 简单二分匹配,根据题意构造一个无向图.然后求最小点覆盖,然后扫描mark数组将曾经匹配的点所匹配 ...

  10. HDU 5943 2016CCPC杭州 K: Kingdom of Obsession(二分匹配)

    题意:给你一张二分图,左边是s+1到s+n这n个数,右边是1到n这n个数 如果x在左边,y在右边,且x%y==0,那么x可以和y匹配,问这个二分图是否存在完美匹配 如果左边有两个以上的质数出现,那么一 ...

最新文章

  1. Product Orders(生产订单)状态相关函数BAPI
  2. 安装工程造价课程设计_造价课程设计.docx
  3. 《ASCE1885的信息安全》の使用Crypto++的MD5算法对字符串进行哈希
  4. django 转发_教你搭建Django环境,就是这么简单
  5. 坑 之 Tensor XXX must be from the same graph as Tensor XXX
  6. 【Python CheckiO 题解】Army Battles
  7. excel二极管伏安特性曲线_【刘敏蔷老师】半导体二极管的原理及应用
  8. 玩大了!别再埋头学Python了,它真的无用!
  9. Dajngo之ajax(get和post)请求(亲测)
  10. Eclipse-Git
  11. 访问不了_etherscan访问不了的替代方案
  12. mysql 索引重复 更新_MySQL——ON DUPLICATE KEY UPDATE添加索引值实现重复插入变更update...
  13. Tkinter模块GUI界面化编程实战(三)——2048小游戏(含详解及完整源码、完整程序下载链接)
  14. 第1期——WLAN定义和基本架构
  15. OperationTrident游戏开发总结
  16. Unity 图片字体制作
  17. 电子海图开发第四十七篇 GPS数据解析(共一百篇)
  18. Solidity众筹案例
  19. Jupyter Notebook,day1 2019.3.25
  20. 【研究报告】2021奢侈品营销启示录——附下载链接

热门文章

  1. google地图 经纬度查询
  2. 浅析融媒体的发展现状和未来前景
  3. 主板供电接口 图解安装详细过程
  4. diskgenius做win10系统迁移
  5. android 4.0.3固件,OPPO Find3 android 4.0固件正式发布
  6. layer修改弹框标题样式
  7. Marlin代码分析一些记录
  8. 微信小程序--获取pdf
  9. This request has been blocked; the content must be served over HTTPS.
  10. python计算无穷级数求和常用公式_级数求和常用方法-级数求和法