题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2819

题目大意:

  给出一个N*N的0/1矩阵,只能交换整行或者整列,问最少交换多少次可以变成一个主对角线上的数都为1的矩阵。

解题思路:

  对行和列进行二分匹配,如果行和列之间不是完全匹配,直接输出 -1;否则就对匈牙利算法匹配后的得到的每一列对应的行进行操作(当然你也可以是对列进行操作,后面的交换也要进行相应的调整),如果行i不对应于列i,而行j对应列i,那么交换第i,j列。好题!

AC代码:

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=+;
bool link[maxn][maxn],vis[maxn];
int col[maxn]; //记录匈牙利算法跑完以后各列所匹配的行
int N;
pair<int,int> ans[maxn];
bool finds(int x){
for(int i=;i<=N;i++){
if(link[x][i]&&!vis[i]){
vis[i]=true;
if(col[i]==||finds(col[i])){
col[i]=x;
return true;
}
}
}
return false;
}
int main(){
int t;
while(scanf("%d",&N)==){
for(int i=;i<=N;i++){
for(int j=;j<=N;j++){
scanf("%d",&t);
if(t) link[i][j]=true;
else link[i][j]=false;
}
}
memset(col,false,sizeof(col));
bool no=false;
for(int i=;i<=N;i++){
memset(vis,false,sizeof(vis));
if(!finds(i)){
no=true; break;
}
}
if(no) printf("-1\n");
else{
int cnt=;
for(int i=;i<=N;i++){
if(col[i]==i) continue;
else{
for(int j=i+;j<=N;j++){
if(col[j]==i){
ans[cnt]=make_pair(i,j);
col[j]=col[i];
cnt++;
}
}
}
}
printf("%d\n",cnt);
for(int i=;i<cnt;i++){
printf("C %d %d\n",ans[i].first,ans[i].second);
}
}
}
return ;
}

最新文章

  1. 《Linux内核设计与实现》读书笔记 第一、二章
  2. canvas 的一些效果
  3. WordPress基础:极简安装教程
  4. 深入理解abstract class和interface(转)
  5. Codeforces Round #245 (Div. 1) B. Working out (简单DP)
  6. Android重构篇——项目架构篇
  7. C/C++ Volatile关键词深度剖析(转)
  8. 几个大型网站的Feeds(Timeline)设计简单对比
  9. Linux Curl命令
  10. laravel5 项目上线后务必将开发环境更改为生产环境
  11. Leetcode 714 - Node
  12. js验证前后密码是否一致,为什么当我输入不一致密码时,不会弹出警告啊
  13. [Oracle]坏块处理:确认坏块的对象
  14. Revit API遍历系统族布置喷头
  15. vue2.0路由-适合刚接触新手简单理解
  16. df and du
  17. [C# | XML] XML 反序列化解析错误:&lt;xml xmlns=&#39;&#39;&gt; was not expected. 附通用XML到类解析方法
  18. python2.x和3.x的区别(不定时更新)
  19. (总结)MySQL自带的性能压力测试工具mysqlslap详解
  20. Dell服务器iDrac口默认账号密码和IP

热门文章

  1. 【高并发】又一个朋友面试栽在了Thread类的stop()方法和interrupt()方法上!
  2. 打造更好用的 EF 自动审计
  3. 浅谈 Objective-C Associated Objects
  4. 日日算法:Dijkstra算法
  5. 用数据说话,R语言有哪七种可视化应用?
  6. log4net进阶手札(二):基本用法
  7. 原生JS设计轮播图
  8. 自动安装带nginx_upstream_check_module模块的Nginx脚本
  9. python(os 模块)
  10. redis系列之4----redis高级应用(集群搭建、集群分区原理、集群操作)