匈牙利算法
1. 算法简介
2. 案例分析——素数伴侣
解析:
将数字分为奇数和偶数,按照匈牙利算法看有多少对可匹配。
import math
def isPrime(n):
if n < 4:
return n > 1
for i in range(2, int(math.sqrt(n)+1)):
if n % i == 0:
return False
return True
def match(odd):
# 对偶数进行遍历,查看是否有匹配的
for i in range(n):
if not vis[i] and isPrime(evens[i] + odd):
# 标记当前偶数,下轮递归无法选择
vis[i] = True
# 如果当前偶数无匹配或者当前偶数有匹配且匹配的奇数还有其他偶数,则匹配
if p[i] == 0 or match(p[i]):
p[i] = odd
return True
return False
if __name__=='__main__':
while True:
try:
n = int(input())
nums = list(map(int, input().split()))
odds = []
evens = []
for num in nums:
if num % 2 == 0:
odds.append(num)
else:
evens.append(num)
n = len(evens)
res = 0
p = [0] * n
for odd in odds:
vis = [0] * n
if match(odd):
res += 1
print(res)
except:
break