描述
输入一个字符串,内容是一个不重复的整数数组。
若数组中两个数相加为素数,那么这两个数可以配对,即素数伴侣。
一个数字只能配对一次。
输出最大配对数。
示例
输入:
4
2 5 6 13
输出:
2
说明:
输入第一行为数组长度,第二行为数组字符串
此时当2和13配对,5和6配对时,得到最大配对数2
匈牙利算法介绍
匈牙利算法用于解决二分图最大匹配问题。
二分图是指一个图的节点可以分为两部分A和B,A中的节点只和B中的节点有连接,B中的节点只和A中的节点有连接,例如下图:
匈牙利算法可以找出一种方案使得在一个节点只能至多拥有一次匹配的情况下,匹配数最大。
匈牙利算法的策略是“先到先得”和“请求让出”。
对于“先到先得”,例如检查A1的匹配,A1可以和B2匹配,那么就先让A1和B2匹配上。
对于“请求让出”,例如检查A2的匹配,此时B2已经被A1匹配了,那么就向A1请求让出。此时A1还可以和B3匹配,那么就让A1让出B2,使得A1和B3匹配,A2和B2匹配。假如A1在B2后没有更多匹配了,那么A1就不让A2,A2往后寻找到B4进行匹配。假如B3已经被其他A节点匹配了,那么A1就请求其他节点让出B3,形成递归的逻辑。