Given an N*N matrix with each entry equal to 0 or 1. You can swap any two rows or any two columns. Can you find a way to make all the diagonal entries equal to 1?

InputThere are several test cases in the input. The first line of each test case is an integer N (1 <= N <= 100). Then N lines follow, each contains N numbers (0 or 1), separating by space, indicating the N*N matrix.OutputFor each test case, the first line contain the number of swaps M. Then M lines follow, whose format is “R a b” or “C a b”, indicating swapping the row a and row b, or swapping the column a and column b. (1 <= a, b <= N). Any correct answer will be accepted, but M should be more than 1000.

If it is impossible to make all the diagonal entries equal to 1, output only one one containing “-1”. 
Sample Input

2
0 1
1 0
2
1 0
1 0

Sample Output

1
R 1 2
-1
题意:给一个只有0 1的矩阵,是否能通过交换两行或者两列使对角线全为1
题解:二分图匹配x和y,输出方法是关键,两遍循环取对应的xy不相同的进行交换记录交换的行或者列(由矩阵知识可知行和列交换一种就行了)
刚开始因为but M should be more than 1000. 这句话我非要作死输出1000个,话说题目能不能不要瞎写啊!!!
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define ll long long
#define mod 1000000007 using namespace std; const int N=+,maxn=+,inf=0x3f3f3f3f; int color[N],n;
bool used[N],ok[N][N]; bool match(int x)
{
for(int i=;i<=n;i++)
{
if(ok[x][i]&&!used[i])
{
used[i]=;
if(color[i]==||match(color[i]))
{
color[i]=x;
return ;
}
}
}
return ;
}
int solve()
{
int ans=;
memset(color,,sizeof color);
for(int i=;i<=n;i++)
{
memset(used,,sizeof used);
ans+=match(i);
}
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie();
while(cin>>n){
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
cin>>ok[i][j];
if(solve()!=n)cout<<-<<endl;
else
{
// for(int i=1;i<=n;i++)cout<<color[i]<<endl;
memset(used,,sizeof used);
queue<pair<int,int> >q;
for(int i=;i<=n;i++)
{
if(i==color[i])continue;
for(int j=i+;j<=n;j++)
{
if(j==color[j])continue;
if(i==color[j])
{
q.push(make_pair(i,j));
swap(color[i],color[j]);
}
}
}
cout<<q.size()<<endl;
while(!q.empty()){
cout<<"C "<<q.front().first<<" "<<q.front().second<<endl;
q.pop();
}
}
}
return ;
}

最新文章

  1. (转)浅谈Java中的equals和==
  2. C++(VS2012)DLL动态库的生成和调用
  3. GridControl的用法(1)
  4. SQL注入测试平台 SQLol -2.SELECT注入测试
  5. 用Keytool和OpenSSL生成和签发数字证书
  6. 如何设计Java框架----一个简单的例子【翻译】
  7. ADO接口
  8. Jndi使用好处,与简单实例【JBOSS】
  9. RabbitMQ入门-初识RabbitMQ
  10. HDU1159-Common Subsequence-LCS
  11. 史上最全的FTP网址
  12. Dynamics CRM2015 on-premises直接升级Dynamics CRM2016 on-premises
  13. temp--贵州银行
  14. php解析文本文件呈现在表格上
  15. 电子产品使用感受之—我的iPad Pro坏了。。。
  16. windows7 64位安装tensorflow 1.4.0 CPU版本
  17. Linux记录-普通用户下执行sudo xxx 找不到命令解决方案
  18. Linux 保护文件 不给修改
  19. linux中uptime命令查看linux系统负载
  20. Codeforces Round #295 (Div. 2)A - Pangram 水题

热门文章

  1. 如何修改SVN客户端中保存的密码
  2. WINFROM 无边框窗体的移动和改变大小
  3. 任务调度之持久化(基于Quartz.net)
  4. Swift开发
  5. 关于压缩jar包时提示*.*没有这个文件或目录的问题以及解决办法:
  6. Struts2之i18N国际化
  7. WPF之路五:wpf 隐藏与显示 Visibility
  8. Python之路-基本数据类型
  9. 在Activiti中如何使用自定义的组织架构
  10. POPTEST老李分享session,cookie的安全性以及区别 2