python實現匈牙利演算法

2021-09-19 01:31:29 字數 2327 閱讀 2795

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

print(self.m)

return 1

else:

self.m.remove((self.cy[v], v))

if self.path(self.cy[v]):

self.cx[u] = v

self.cy[v] = u

print(self.m)

return 1

return 0

if __name__ == '__main__':

print("dfs_hungary------------------------------")

nx, ny = ['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h']

edge = , 'b':, 'c':, 'd':} # 1 表示可以匹配, 0 表示不能匹配

2.通過廣度優先搜尋實現匈牙利演算法

python實現標籤匹配 匈牙利演算法

coding utf 8 用匈牙利演算法實現標籤的匹配問題,並且輸出最後的標籤 import numpy as np from scipy.optimize import linear sum assignment label np.array 1,1,2,1,1,2,2,2,3,2,2,3,1,3...

匈牙利演算法C 實現

匈牙利演算法 用來求二分圖的最大匹配,核心在於求增廣路徑並且取反。也就是已經在匹配中的邊變成不在匹配中的,不在配中的邊變成在匹配中。網上可以找到很多的 但是我還是自己寫了一遍,實現的並不優美,全域性變數多到 以後還是應該多看看別人的 來學習。比如增廣路徑的尋找過程中找到乙個已經在匹配中的邊,這條邊其...

匈牙利演算法

匈牙利演算法 edmonds演算法 步聚 1 首先用 標記x中所有的非m頂點,然後交替進行步驟 2 3 2 選取乙個剛標記 用 或在步驟 3 中用 yi 標記 過的x中頂點,例如頂點xi,如果xi與y為同一非匹配邊的兩端點,且在本步驟中y尚未被標記過,則用 xi 去標記y中頂點y。重複步驟 2 直至...