hdu2819(二分构图)
来源:互联网 发布:java 文字转图片 编辑:程序博客网 时间:2024/06/05 05:55
题意:给一个n*n的01矩阵,要求通过行变换或列变换使对角线上都是1,并给出变换步骤。若无解则输出-1。
分析:就是一个简单的二分构图题,行和列匹配就行了,有解的话就是完备匹配。关键在于怎么给出步骤。如果把行数放在左边,列数放在右边,这样的匹配结果中match[i]就表示了第i行的1所在的位置,而为了使对角线上全是1,应有match[i]==i,所以用选择排序的方法对match[]进行排序,并记录下match的下标交换过程,然后输出就行了。
还有一点就是,如果所给矩阵有解,则一定能只通过行变换或列变换求解,这想一想就能明白了。
代码如下:
#include<cstdio>#include<cstring>#include<iostream>#include<cstdlib>#include<cmath>#include<algorithm>#include<queue>#include<stack>#include<set>#include<map>using namespace std;const int M=1010;const int N=110;int g[N][N],vis[N],m[N][N];int n,ans,match[N];void build(){ memset(m,0,sizeof(m)); memset(g,0,sizeof(g)); for (int i=0;i<n;i++) for (int j=0;j<n;j++) { scanf("%d",&g[i][j]); if (g[i][j]){ m[i][j]=1; } }}bool dfs(int x){ int i; for (i=0;i<n;i++) if (m[x][i] && !vis[i]) { vis[i]=true; if (match[i]==-1 || dfs(match[i])){ match[i]=x; return true; } } return false;}void print(){ int i,j,k=0,t=0; pair<int,int> p[N]; for (i=0;i<n;i++) { k=i; for (j=i+1;j<n;j++) if (match[k]>match[j]){ k=j; } if (i!=k){ swap(match[i],match[k]); p[t].first=match[i]; p[t].second=match[k]; t++; } } printf("%d\n",t); for (i=0;i<t;i++) printf("R %d %d\n",p[i].first+1,p[i].second+1);}int main(){ int i,j; while(~scanf("%d",&n)) { build(); ans=0; memset(match,-1,sizeof(match)); for (i=0;i<n;i++) { memset(vis,false,sizeof(vis)); if (dfs(i)) ans++; } if (ans<n){ printf("-1\n"); } else { print(); } }}/*41 0 1 00 1 0 00 1 0 00 0 0 140 0 1 01 0 0 00 1 0 00 0 0 130 1 01 0 00 0 1*/
0 0
- hdu2819(二分构图)
- hdu2819二分图匹配
- hdu2819 Swap(二分匹配)
- HDU2819 Swap (二分图匹配)
- hdu2819 swap(二分图匹配)
- hdu2819
- 【图论】【二分图匹配】[HDU2819]Swap
- hdu2819棋盘游戏(二分图匹配)
- HDU2819【二分匹配与矩阵的秩】
- hdu2819-Swap(二分图匹配,思路)
- ZOJ1654(二分构图题典例)
- 网络流+二分构图
- hdu1281(二分匹配+构图)
- ZOJ3156_Taxi(二分图/二分构图)
- poj2455二分构图网络流
- hdu1281+坐标构图+二分匹配
- hdu2819 Swap 二分图最大匹配 输出路径
- HDU2819 Swap(二分图匹配匈牙利算法+记录路径)
- 第十八周项目二—灭灯
- Android之网络----使用HttpClient发送HTTP请求(通过get方法获取数据)
- UI第十三课
- JPA使用Hibernate实现,使用UUID.主键的生成策略.
- MYSQL--事务处理
- hdu2819(二分构图)
- ExtJs4学习(九)读写器reader、writer
- 唐门第一章at人格
- compass 编译 sourcemap 配置
- 解决64位进程调用32位库文件报错问题
- DateUtils.addDays
- BOOST_TYPEOF和BOOST_AUTO
- pro_图片轮转器——iOS黑马
- Xcode 常用编译选项设置