1.通过深度优先搜索实现匈牙利算法
#-*-coding:utf-8-*-
#created by lixiao at 2019/4/16
class DFS_hungary():
def __init__(self, nx, ny, edge, cx, cy, visited):
self.nx, self.ny=nx, ny #x和y集合中顶点的个数
self.edge = edge #edge[i][j]为1表示i,j可以匹配
self.cx, self.cy=cx,cy #用来记录x集合中匹配的y元素是哪个
self.visited=visited #用来记录该顶点是否被访问过
self.M=[]
def match(self):
res=0
for i in self.nx:
if self.cx[i]==-1: #初始值为-1表示两个集合中都没有匹配的元素
for key in self.ny:
self.visited[key]=0 # 将visited置0表示未访问过
res+=self.path(i)
return res
def path(self, u):
for v in self.ny:
if self.edge[u][v] and (not self.visited[v]):
self.visited[v]=1
if (self.cy[v])==-1 :
self.cx[u] = v
self.cy[v] = u
self.M.app