Merge remote-tracking branch 'origin/master'

# Conflicts:
#	graphs/edmonds_blossom_algorithm.py
This commit is contained in:
Tarun Vishwakarma 2024-10-14 21:13:01 +05:30
commit a547676800

View File

@ -4,9 +4,8 @@ from graphs.edmonds_blossom_algorithm import EdmondsBlossomAlgorithm
class EdmondsBlossomAlgorithmTest(unittest.TestCase): class EdmondsBlossomAlgorithmTest(unittest.TestCase):
def convert_matching_to_array(self, matching): def convert_matching_to_array(self, matching):
""" Helper method to convert a """Helper method to convert a
list of matching pairs into a sorted 2D array. list of matching pairs into a sorted 2D array.
""" """
# Convert the list of pairs into a list of lists # Convert the list of pairs into a list of lists
@ -21,7 +20,7 @@ class EdmondsBlossomAlgorithmTest(unittest.TestCase):
return result return result
def test_case_1(self): def test_case_1(self):
""" Test Case 1: A triangle graph where vertices 0, 1, and 2 form a cycle. """ """Test Case 1: A triangle graph where vertices 0, 1, and 2 form a cycle."""
edges = [[0, 1], [1, 2], [2, 0]] edges = [[0, 1], [1, 2], [2, 0]]
matching = EdmondsBlossomAlgorithm.maximum_matching(edges, 3) matching = EdmondsBlossomAlgorithm.maximum_matching(edges, 3)
@ -29,7 +28,7 @@ class EdmondsBlossomAlgorithmTest(unittest.TestCase):
assert expected == self.convert_matching_to_array(matching) assert expected == self.convert_matching_to_array(matching)
def test_case_2(self): def test_case_2(self):
""" Test Case 2: A disconnected graph with two components. """ """Test Case 2: A disconnected graph with two components."""
edges = [[0, 1], [1, 2], [3, 4]] edges = [[0, 1], [1, 2], [3, 4]]
matching = EdmondsBlossomAlgorithm.maximum_matching(edges, 5) matching = EdmondsBlossomAlgorithm.maximum_matching(edges, 5)
@ -37,7 +36,7 @@ class EdmondsBlossomAlgorithmTest(unittest.TestCase):
assert expected == self.convert_matching_to_array(matching) assert expected == self.convert_matching_to_array(matching)
def test_case_3(self): def test_case_3(self):
""" Test Case 3: A cycle graph with an additional edge outside the cycle. """ """Test Case 3: A cycle graph with an additional edge outside the cycle."""
edges = [[0, 1], [1, 2], [2, 3], [3, 0], [4, 5]] edges = [[0, 1], [1, 2], [2, 3], [3, 0], [4, 5]]
matching = EdmondsBlossomAlgorithm.maximum_matching(edges, 6) matching = EdmondsBlossomAlgorithm.maximum_matching(edges, 6)
@ -45,7 +44,7 @@ class EdmondsBlossomAlgorithmTest(unittest.TestCase):
assert expected == self.convert_matching_to_array(matching) assert expected == self.convert_matching_to_array(matching)
def test_case_no_matching(self): def test_case_no_matching(self):
""" Test Case 4: A graph with no edges. """ """Test Case 4: A graph with no edges."""
edges = [] # No edges edges = [] # No edges
matching = EdmondsBlossomAlgorithm.maximum_matching(edges, 3) matching = EdmondsBlossomAlgorithm.maximum_matching(edges, 3)
@ -53,7 +52,7 @@ class EdmondsBlossomAlgorithmTest(unittest.TestCase):
assert expected == self.convert_matching_to_array(matching) assert expected == self.convert_matching_to_array(matching)
def test_case_large_graph(self): def test_case_large_graph(self):
""" Test Case 5: A complex graph with multiple cycles and extra edges. """ """Test Case 5: A complex graph with multiple cycles and extra edges."""
edges = [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 0], [1, 4], [2, 5]] edges = [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 0], [1, 4], [2, 5]]
matching = EdmondsBlossomAlgorithm.maximum_matching(edges, 6) matching = EdmondsBlossomAlgorithm.maximum_matching(edges, 6)
@ -69,5 +68,5 @@ class EdmondsBlossomAlgorithmTest(unittest.TestCase):
assert result in (possible_matching_1, possible_matching_2) assert result in (possible_matching_1, possible_matching_2)
if __name__ == '__main__': if __name__ == "__main__":
unittest.main() unittest.main()