55
66class EdmondsBlossomAlgorithm :
77 @staticmethod
8- def maximum_matching (edges : list [tuple [int , int ]], vertex_count : int ) -> list [tuple [int , int ]]:
8+ def maximum_matching (
9+ edges : list [tuple [int , int ]], vertex_count : int
10+ ) -> list [tuple [int , int ]]:
911 """
1012 Finds the maximum matching in a general graph using Edmonds' Blossom Algorithm.
1113
@@ -80,10 +82,16 @@ def maximum_matching(edges: list[tuple[int, int]], vertex_count: int) -> list[tu
8082 EdmondsBlossomAlgorithm .contract_blossom (
8183 BlossomData (
8284 BlossomAuxData (
83- queue , parent , base , in_blossom ,
84- match , in_queue
85+ queue ,
86+ parent ,
87+ base ,
88+ in_blossom ,
89+ match ,
90+ in_queue ,
8591 ),
86- current_vertex , neighbor , base_vertex
92+ current_vertex ,
93+ neighbor ,
94+ base_vertex ,
8795 )
8896 )
8997
@@ -96,7 +104,9 @@ def maximum_matching(edges: list[tuple[int, int]], vertex_count: int) -> list[tu
96104 return matching_result
97105
98106 @staticmethod
99- def update_matching (match : list [int ], parent : list [int ], current_vertex : int ) -> None :
107+ def update_matching (
108+ match : list [int ], parent : list [int ], current_vertex : int
109+ ) -> None :
100110 """
101111 Updates the matching along the augmenting path found.
102112
@@ -155,7 +165,7 @@ def find_base(
155165 current_vertex_v = parent [current_vertex_v ]
156166
157167 @staticmethod
158- def contract_blossom (blossom_data : ' BlossomData' ) -> None :
168+ def contract_blossom (blossom_data : " BlossomData" ) -> None :
159169 """
160170 Contracts a blossom in the graph, modifying the base array
161171 and marking the vertices involved.
@@ -171,7 +181,9 @@ def contract_blossom(blossom_data: 'BlossomData') -> None:
171181 current_vertex_u = blossom_data .u
172182 while blossom_data .aux_data .base [current_vertex_u ] != blossom_data .lca :
173183 base_u = blossom_data .aux_data .base [current_vertex_u ]
174- match_base_u = blossom_data .aux_data .base [blossom_data .aux_data .match [current_vertex_u ]]
184+ match_base_u = blossom_data .aux_data .base [
185+ blossom_data .aux_data .match [current_vertex_u ]
186+ ]
175187 blossom_data .aux_data .in_blossom [base_u ] = True
176188 blossom_data .aux_data .in_blossom [match_base_u ] = True
177189 current_vertex_u = blossom_data .aux_data .parent [
@@ -181,7 +193,9 @@ def contract_blossom(blossom_data: 'BlossomData') -> None:
181193 current_vertex_v = blossom_data .v
182194 while blossom_data .aux_data .base [current_vertex_v ] != blossom_data .lca :
183195 base_v = blossom_data .aux_data .base [current_vertex_v ]
184- match_base_v = blossom_data .aux_data .base [blossom_data .aux_data .match [current_vertex_v ]]
196+ match_base_v = blossom_data .aux_data .base [
197+ blossom_data .aux_data .match [current_vertex_v ]
198+ ]
185199 blossom_data .aux_data .in_blossom [base_v ] = True
186200 blossom_data .aux_data .in_blossom [match_base_v ] = True
187201 current_vertex_v = blossom_data .aux_data .parent [
@@ -203,8 +217,13 @@ class BlossomAuxData:
203217 """
204218
205219 def __init__ (
206- self , queue : deque , parent : list [int ], base : list [int ], in_blossom : list [bool ],
207- match : list [int ], in_queue : list [bool ]
220+ self ,
221+ queue : deque ,
222+ parent : list [int ],
223+ base : list [int ],
224+ in_blossom : list [bool ],
225+ match : list [int ],
226+ in_queue : list [bool ],
208227 ) -> None :
209228 self .queue = queue
210229 self .parent = parent
0 commit comments