学习华为上机测试题,遇见了下面题,很有意思,核心是匈牙利算法问题。

特此学习记录。资料均参考自网络。

匈牙利算法目的:找出两边最大的匹配的数量。

参考资料:

https://blog.csdn.net/u013377068/article/details/79893013

https://blog.csdn.net/sunny_hun/article/details/80627351

https://www.nowcoder.com/profile/8408989/codeBookDetail?submissionId=25842225

题目描述:
若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数中挑选出若干对组成“素数伴侣”,挑选方案多种多样,例如有4个正整数:2,5,6,13,如果将5和6分为一组中只能得到一组“素数伴侣”,而将2和5、6和13编组将得到两组“素数伴侣”,能组成“素数伴侣”最多的方案称为“最佳方案”,当然密码学会希望你寻找出“最佳方案”。

输入:有一个正偶数N(N≤100),表示待挑选的自然数的个数。后面给出具体的数字,范围为[2,30000]。

输出:输出一个整数K,表示你求得的“最佳方案”组成“素数伴侣”的对数。

输入说明:1 输入一个正偶数n, 2输入n个整数

输出描述:  求得的“最佳方案”组成“素数伴侣”的对数。

# In[]# 匈牙利算法
# 别人代码
def prime_judge(n):   #判断一个数是否是素数m=int(n**0.5)if n%2==0:return Falseelse:for i in range(m+1)[3::2]:if n%i==0:return Falsereturn Truedef group_lst(lst): #判断列表内数为奇偶数,并分开存放a = []b = []for i in lst:if int(i)%2 == 1:a.append(int(i))else:b.append(int(i))return (a, b)def matrix_ab(a, b):  #构建一个a行b列的二维矩阵,矩阵内容为1表示a+b为素数,为0表示a+b不是素数matrix = [[0 for i in range(len(b))] for i in range(len(a))]for ii, i in enumerate(a):for jj, j in enumerate(b):if prime_judge(i+j) == True:matrix[ii][jj] = 1return matrixdef find(x):  #匈牙利算法匹配for index, i in enumerate(b):if matrix[x][index] == 1 and used[index] == 0:  # 男女有好感 且 这个女的还没有和男的匹配过used[index] = 1if connect[index] == -1 or find(connect[index]) != 0: # 如果这个女的还单身  或者  这个女的已经配好的男的还能去找别的女的(递归)connect[index] = x                     # 匹配成功 第x号男的 和 第index号女的 return 1return 0while True: #理解a,b为男女配对的话try:n = int(input())m = input().split()(a, b) = group_lst(m)matrix = matrix_ab(a, b)connect = [-1 for i in range(len(b))]   #标记这个女的是否已经配对成功count = 0               for i in range(len(a)):  used = [0 for j in range(len(b))]  # 女的是否被这个男的查找过了if find(i):   #从当前男的开始查找count += 1  # 配对成功+1(这个男女的配对可能会变,但是数量不变)print(count)except:break

匈牙利算法学习笔记_Python代码相关推荐

  1. 数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配

    数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配 引入小题:最短路径 最大流问题(maximum flow problem) ...

  2. Manacher算法学习笔记 | LeetCode#5

    Manacher算法学习笔记 DECLARATION 引用来源:https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途:寻找一个字符串的 ...

  3. 数据结构与算法学习笔记之 提高读取性能的链表(上)

    数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...

  4. 两个字符串的最长公共子序列长度_算法学习笔记(58): 最长公共子序列

    (为什么都更了这么多篇笔记了,这时候才讲这么基础的内容呢?因为我本来以为LCS这种简单的DP不用讲的,结果CF不久前考了LCS的变式,然后我发现由于自己对LCS一点都不熟,居然写不出来 ,于是决定还是 ...

  5. 机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例

    ** 机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例. 具体knn算法是怎样的我这里就不再详细论述.在这里我注意总结我使用knn算法进行一个分类的分析 ** 分析过程 1.前期准备 引入 ...

  6. Python最优化算法学习笔记(Gurobi)

    微信公众号:数学建模与人工智能 github地址:https://github.com/QInzhengk/Math-Model-and-Machine-Learning Python最优化算法学习笔 ...

  7. 网络流算法学习笔记——最大流问题基本概念和Ford-Fulkerson方法(标号法C++实现)

    屈婉玲<算法设计与分析>第2版第7章网络流算法学习笔记. 基本概念 最大流问题,相当于有从s到t的供水系统,每段路径都有限定流量,除了s.t两地外,每个中间点都不能滞留,从s流入多少,就从 ...

  8. 数据结构与算法学习笔记——链栈

    数据结构与算法学习笔记(C语言) 链栈 在开始链栈的学习之前,我们先实现一下上一篇文章中提到的检查括号匹配的小程序,鉴于水平有限,本人就随便写一下代码好了,目标仅限于对功能的实现. /*用顺序栈这种数 ...

  9. LMS与RLS算法学习笔记

    LMS与RLS算法学习笔记 一. 研究目的 1.1最陡下降法理论 1.2$LMS$算法 1.3$RLS$算法 1.4研究目标 二.代码解析 三.结果 实现代码点击 这里下载 一. 研究目的 1.1最陡 ...

最新文章

  1. Vue生命周期函数详解
  2. 把项目放到码云上,通过git 进行项目管理
  3. GURB详解(实施级)
  4. vue手机端回退_推荐3个快速开发平台 前后端都有 接私活又有着落了
  5. C 将长型整数转换为字符串
  6. 设置cookie和查找cookie的方法
  7. 两个iphone怎么大量传照片_iphone12(或iphone12 pro)如何正确的转移手机数据?apple ID不通过,或者正在传输中持续无进度怎么办?...
  8. 蚂蚁研发流程大公开:上百个开发者也能同时在一个 App 环境内进行高效开发
  9. java一个界面用另一个界面的值_如何将参数/值从一个弹出窗口传递到Angular2中的另一个弹出窗口...
  10. RFC(一系列以编号排定的文件)
  11. java的dom4j怎么调_dom4j.jar 的调试方法
  12. 蚂蚁金服数据库性能超甲骨文引热议;三大运营商 5G 预约用户接近 930 万;苹果发布新版 Mac 系统| 极客头条...
  13. 混淆矩阵评价指标_机器学习模型评价指标 -- 混淆矩阵
  14. 编写在浏览器中不弹出警告的ActiveX控件
  15. Unable to find instance for XXX
  16. 如何用matlab生成一个单位正交矩阵?
  17. LCD1602液晶 - 开发技术详解
  18. VB编程操作AutoCAD单行文字
  19. 读博那么辛苦,为什么还有很多人要读博士?
  20. Python3集成PayPal跨境支付三方接口以及订单查询和退款业务!

热门文章

  1. SD-WAN平台的要素
  2. Codeforces Round #247 (Div. 2)C. k-Tree(动态规划)
  3. 和Java相关的书籍,想成为架构师的请收藏一下啊
  4. Node.js 和Socket.IO 实现chat
  5. 分享超酷的添加图片悬浮特效jQuery插件 - Adipoli
  6. 存储过程中将sql语句结果赋值给变量
  7. Active report-在Web 上使用 active report
  8. MySQL 事务隔离
  9. Git客户端(TortoiseGit)基本使用详解
  10. C++编程语言之赋值运算符