博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu2819Swap 匈牙利算法
阅读量:6838 次
发布时间:2019-06-26

本文共 1291 字,大约阅读时间需要 4 分钟。

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

//对于n*n矩阵的n行,我们要求每行都要有一个特别的1与其匹配,如果匹配数少于n,则输出-1//二分图的构造方法是 第i行的第j列有一个1,那就在ij之间连一条边,则map[i][j]=1(后来发现其实跟构造矩阵相同。。) //如果匹配数为n,就对link进行排序,由于行变换和列变换相同,我们只进行行变换(为了能对应题目的实例) //假如是行在左边,该行上1所在的列在右边的话,那最终匹配后会得出link[j]=i,我们按照link的值排序 #include
#include
using namespace std;int n,x;bool map[105][105]; bool vis[105];int link[105];bool dfs(int t){ for(int i=1;i<=n;i++) { if(map[t][i] && !vis[i]) { vis[i]=1; if(link[i]==-1 || dfs(link[i])) { link[i]=t; return 1; } } } return 0;}int main(){ while(cin>>n){ memset(map,0,sizeof(map)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>map[i][j]; memset(link,-1,sizeof(link)); int flag=1; for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(!dfs(i)) { flag=0; printf("-1\n"); break; } } if(flag){
//选择排序 int tmp,m,i,k,mn,ans=0; int swap1[105],swap2[105]; for(i=1;i

 

转载于:https://www.cnblogs.com/neverchanje/p/3613470.html

你可能感兴趣的文章
js 查找树节点 数组去重
查看>>
【翻译】对于Ext JS 5,你准备好了吗?
查看>>
android&nbsp;sqlite&nbsp;增删改[insert、up…
查看>>
Eclipse常见问题集锦
查看>>
杭电 1711 Number Sequence 1686 2203
查看>>
石大ACM2587解题报告
查看>>
php 商场收银收费系统,使用的策略模式
查看>>
2016年宜昌楼市将迎来史上最激烈一战
查看>>
第一次团队冲刺4
查看>>
冒泡排序
查看>>
android studio 各种问题
查看>>
ios中一个开发者证书如何创建多个app应用
查看>>
创建和存储 cookie
查看>>
BZOJ2351[BeiJing2011]Matrix——二维hash
查看>>
Redis常用命令整理
查看>>
js的水仙花数的输出
查看>>
Codeforces Gym 100269 Dwarf Tower (最短路)
查看>>
mongo explain分析详解
查看>>
MySQL 行子查询
查看>>
Comparison Operators Modified by ANY, SOME, or ALL
查看>>