Skip to content

Commit b8571bc

Browse files
Merge remote-tracking branch 'origin/master'
# Conflicts: # graphs/edmonds_blossom_algorithm.py
2 parents 050a0af + 58536a7 commit b8571bc

File tree

1 file changed

+30
-16
lines changed

1 file changed

+30
-16
lines changed

graphs/edmonds_blossom_algorithm.py

+30-16
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55

66
class EdmondsBlossomAlgorithm:
77
@staticmethod
8-
def maximum_matching(edges: list[tuple[int, int]], vertex_count: int) \
9-
-> list[tuple[int, int]]:
8+
def maximum_matching(
9+
edges: list[tuple[int, int]], vertex_count: int
10+
) -> list[tuple[int, int]]:
1011
"""
1112
Finds the maximum matching in a general graph using Edmonds' Blossom Algorithm.
1213
@@ -84,10 +85,16 @@ def maximum_matching(edges: list[tuple[int, int]], vertex_count: int) \
8485
EdmondsBlossomAlgorithm.contract_blossom(
8586
BlossomData(
8687
BlossomAuxData(
87-
queue, parent, base, in_blossom,
88-
match, in_queue
88+
queue,
89+
parent,
90+
base,
91+
in_blossom,
92+
match,
93+
in_queue,
8994
),
90-
current_vertex, neighbor, base_vertex
95+
current_vertex,
96+
neighbor,
97+
base_vertex,
9198
)
9299
)
93100

@@ -100,8 +107,9 @@ def maximum_matching(edges: list[tuple[int, int]], vertex_count: int) \
100107
return matching_result
101108

102109
@staticmethod
103-
def update_matching(match: list[int],
104-
parent: list[int], current_vertex: int) -> None:
110+
def update_matching(
111+
match: list[int], parent: list[int], current_vertex: int
112+
) -> None:
105113
"""
106114
Updates the matching along the augmenting path found.
107115
@@ -160,7 +168,7 @@ def find_base(
160168
current_vertex_v = parent[current_vertex_v]
161169

162170
@staticmethod
163-
def contract_blossom(blossom_data: 'BlossomData') -> None:
171+
def contract_blossom(blossom_data: "BlossomData") -> None:
164172
"""
165173
Contracts a blossom in the graph, modifying the base array
166174
and marking the vertices involved.
@@ -176,9 +184,9 @@ def contract_blossom(blossom_data: 'BlossomData') -> None:
176184
current_vertex_u = blossom_data.vertex_u
177185
while blossom_data.aux_data.base[current_vertex_u] != blossom_data.lca:
178186
base_u = blossom_data.aux_data.base[current_vertex_u]
179-
match_base_u = blossom_data.aux_data.base[blossom_data.aux_data.match
180-
[current_vertex_u]
181-
]
187+
match_base_u = blossom_data.aux_data.base[
188+
blossom_data.aux_data.match[current_vertex_u]
189+
]
182190
blossom_data.aux_data.in_blossom[base_u] = True
183191
blossom_data.aux_data.in_blossom[match_base_u] = True
184192
current_vertex_u = blossom_data.aux_data.parent[
@@ -188,9 +196,9 @@ def contract_blossom(blossom_data: 'BlossomData') -> None:
188196
current_vertex_v = blossom_data.vertex_v
189197
while blossom_data.aux_data.base[current_vertex_v] != blossom_data.lca:
190198
base_v = blossom_data.aux_data.base[current_vertex_v]
191-
match_base_v = blossom_data.aux_data.base[blossom_data.aux_data.match
192-
[current_vertex_v]
193-
]
199+
match_base_v = blossom_data.aux_data.base[
200+
blossom_data.aux_data.match[current_vertex_v]
201+
]
194202
blossom_data.aux_data.in_blossom[base_v] = True
195203
blossom_data.aux_data.in_blossom[match_base_v] = True
196204
current_vertex_v = blossom_data.aux_data.parent[
@@ -212,8 +220,13 @@ class BlossomAuxData:
212220
"""
213221

214222
def __init__(
215-
self, queue: deque, parent: list[int], base: list[int], in_blossom: list[bool],
216-
match: list[int], in_queue: list[bool]
223+
self,
224+
queue: deque,
225+
parent: list[int],
226+
base: list[int],
227+
in_blossom: list[bool],
228+
match: list[int],
229+
in_queue: list[bool],
217230
) -> None:
218231
self.queue = queue
219232
self.parent = parent
@@ -243,3 +256,4 @@ def __init__(self, aux_data: BlossomAuxData, vertex_u: int,
243256
self.vertex_u = vertex_u
244257
self.vertex_v = vertex_v
245258
self.lca = lca
259+

0 commit comments

Comments
 (0)