匈牙利算法什么是匈牙利命名法?

匈牙利算法  时间:2021-07-16  阅读:()

求kM算法和匈牙利算法的程序代码

//二分图最佳匹配,kuhn munkras算法,邻接阵形式,复杂度O(m*m*n) //返回最佳匹配值,传入二分图大小m,n和邻接阵mat,表示权值 //match1,match2返回一个最佳匹配,未匹配顶点match值为-1 //一定注意m<=n,否则循环无法终止 //最小权匹配可将权值取相反数 #include <string.h> #define MAXN 310 #define inf 1000000000 #define _clr(x) memset(x,0xff,sizeof(int)*n)

int kuhn_munkras(int m,int n,int mat[][MAXN],int* match1,int* match2){ int s[MAXN],t[MAXN],l1[MAXN],l2[MAXN],p,q,ret=0,i,j,k; for (i=0;i<m;i++) for (l1[i]=-inf,j=0;j<n;j++) l1[i]=mat[i][j]>l1[i]?mat[i][j]:l1[i]; for (i=0;i<n;l2[i++]=0); for (_clr(match1),_clr(match2),i=0;i<m;i++){ for (_clr(t),s[p=q=0]=i;p<=q&&match1[i]<0;p++) for (k=s[p],j=0;j<n&&match1[i]<0;j++) if (l1[k]+l2[j]==mat[k][j]&&t[j]<0){ s[++q]=match2[j],t[j]=k; if (s[q]<0) for (p=j;p>=0;j=p) match2[j]=k=t[j],p=match1[k],match1[k]=j; } if (match1[i]<0){ for (i--,p=inf,k=0;k<=q;k++) for (j=0;j<n;j++) if (t[j]<0&&l1[s[k]]+l2[j]-mat[s[k]][j]<p) p=l1[s[k]]+l2[j]-mat[s[k]][j]; for (j=0;j<n;l2[j]+=t[j]<0?0:p,j++); for (k=0;k<=q;l1[s[k++]]-=p); } } for (i=0;i<m;i++) ret+=mat[i][match1[i]]; return ret; }

===================================================================

//二分图最大匹配,hungary算法,邻接阵形式,复杂度O(m*m*n) //返回最大匹配数,传入二分图大小m,n和邻接阵mat,非零元素表示有边 //match1,match2返回一个最大匹配,未匹配顶点match值为-1 #include <string.h> #define MAXN 310 #define _clr(x) memset(x,0xff,sizeof(int)*MAXN)

int hungary(int m,int n,int mat[][MAXN],int* match1,int* match2){ int s[MAXN],t[MAXN],p,q,ret=0,i,j,k; for (_clr(match1),_clr(match2),i=0;i<m;ret+=(match1[i++]>=0)) for (_clr(t),s[p=q=0]=i;p<=q&&match1[i]<0;p++) for (k=s[p],j=0;j<n&&match1[i]<0;j++) if (mat[k][j]&&t[j]<0){ s[++q]=match2[j],t[j]=k; if (s[q]<0) for (p=j;p>=0;j=p) match2[j]=k=t[j],p=match1[k],match1[k]=j; } return ret; }

====================================================================

需要别的形式的接口也有

匈牙利算法具体怎么操作呢?

求二分图最大匹配问题用,主函数代码: bool find(int a) { for(int i=1;i<=m;++i) { if(data[a][i]&&!state[i]) { state[i]=true; if(result[i]==0||find(result[i])) { result[i]=a; return true; } } } return false; }

什么是匈牙利命名法?

匈牙利命名法是一种编程时的命名规范。

基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。

命名要基于容易记忆容易理解的原则。

保证名字的连贯性是非常重要的。

举例来说,表单的名称为form,那么在匈牙利命名法中可以简写为frm,则当表单变量名称为Switchboard时,变量全称应该为 frmSwitchboard。

这样可以很容易从变量名看出Switchboard是一个表单,同样,如果此变量类型为标签,那么就应命名成 lblSwitchboard。

可以看出,匈牙利命名法非常便于记忆,而且使变量名非常清晰易懂,这样,增强了代码的可读性,方便各程序员之间相互交流代码。

这种命名技术是由一位能干的Microsoft程序员查尔斯·西蒙尼(Charles Simonyi) 提出的,他出生在匈牙利。

在 Microsoft 公司中和他一起工作的人被教会使用这种约定。

这对他们来说一切都很正常。

但对那些 Simonyi 领导的项目组之外的人来说却感到很奇特,他们认为这是死板的表达方式,甚至说带有这样奇怪的外观是因为它是用匈牙利文写的。

从此这种命名方式就被叫做匈牙利命名法。

美国cera机房 2核4G 19.9元/月 宿主机 E5 2696v2x2 512G

美国特价云服务器 2核4G 19.9元杭州王小玉网络科技有限公司成立于2020是拥有IDC ISP资质的正规公司,这次推荐的美国云服务器也是商家主打产品,有点在于稳定 速度 数据安全。企业级数据安全保障,支持异地灾备,数据安全系数达到了100%安全级别,是国内唯一一家美国云服务器拥有这个安全级别的商家。E5 2696v2x2 2核 4G内存 20G系统盘 10G数据盘 20M带宽 100G流量 1...

LOCVPS新上韩国KVM,全场8折,2G内存套餐月付44元起_网络传真服务器

LOCVPS(全球云)发布了新上韩国机房KVM架构主机信息,提供流量和带宽方式,适用全场8折优惠码,优惠码最低2G内存套餐月付仅44元起。这是一家成立较早的国人VPS服务商,目前提供洛杉矶MC、洛杉矶C3、和香港邦联、香港沙田电信、香港大埔、日本东京、日本大阪、新加坡、德国和荷兰等机房VPS主机,基于KVM或者XEN架构。下面分别列出几款韩国机房KVM主机配置信息。韩国KVM流量型套餐:KR-Pl...

Boomer.host:$4.95/年-512MB/5GB/500GB/德克萨斯州(休斯顿)

部落曾经在去年分享过一次Boomer.host的信息,商家自述始于2018年,提供基于OpenVZ架构的VPS主机,配置不高价格较低。最近,主机商又在LET发了几款特价年付主机促销,最低每年仅4.95美元起,有独立IPv4+IPv6,开设在德克萨斯州休斯顿机房。下面列出几款VPS主机配置信息。CPU:1core内存:512MB硬盘:5G SSD流量:500GB/500Mbps架构:KVMIP/面板...

匈牙利算法为你推荐
g2gB2E和G2E分别是什么意思知识库管理系统知识库管理软件与档案管理软件有什么区别拓扑关系简述空间数据的拓扑关系及其对GIS数据处理和空间分析有何重要意义?jdk6我是win7的系统,安装了JDK6,环境配置都正确了。但是安装完没有应用程序啊~smartuploadjspsmartupload如何使用?弹幕网站A站B站网址是什么,国内很出名嗎?有什么网站特点..清除电脑垃圾怎么清除电脑的垃圾啊?qq业务中心QQ业务办理疫苗之王被称为免疫之王的产品clamwin杀毒软件ClamWin有用吗?有没有主动防御的?
电信主机租用 gomezpeer 网站监控 警告本网站 hnyd 免费smtp服务器 绍兴高防 怎么测试下载速度 怎样建立邮箱 asp免费空间申请 银盘服务 厦门电信 视频服务器是什么 太原联通测速 河南移动梦网 lamp是什么意思 国外免费云空间 97rb 网络速度 睿云 更多