5
5
import random
6
6
from typing import Dict , List , Set , Tuple
7
7
8
-
9
8
# Adjacency list representation of this graph:
10
9
# https://en.wikipedia.org/wiki/File:Single_run_of_Karger%E2%80%99s_Mincut_algorithm.svg
11
10
TEST_GRAPH = {
12
- '1' : ['2' , '3' , '4' , '5' ],
13
- '2' : ['1' , '3' , '4' , '5' ],
14
- '3' : ['1' , '2' , '4' , '5' , '10' ],
15
- '4' : ['1' , '2' , '3' , '5' , '6' ],
16
- '5' : ['1' , '2' , '3' , '4' , '7' ],
17
- '6' : ['7' , '8' , '9' , '10' , '4' ],
18
- '7' : ['6' , '8' , '9' , '10' , '5' ],
19
- '8' : ['6' , '7' , '9' , '10' ],
20
- '9' : ['6' , '7' , '8' , '10' ],
21
- '10' : ['6' , '7' , '8' , '9' , '3' ]
11
+ "1" : ["2" , "3" , "4" , "5" ],
12
+ "2" : ["1" , "3" , "4" , "5" ],
13
+ "3" : ["1" , "2" , "4" , "5" , "10" ],
14
+ "4" : ["1" , "2" , "3" , "5" , "6" ],
15
+ "5" : ["1" , "2" , "3" , "4" , "7" ],
16
+ "6" : ["7" , "8" , "9" , "10" , "4" ],
17
+ "7" : ["6" , "8" , "9" , "10" , "5" ],
18
+ "8" : ["6" , "7" , "9" , "10" ],
19
+ "9" : ["6" , "7" , "8" , "10" ],
20
+ "10" : ["6" , "7" , "8" , "9" , "3" ],
22
21
}
23
22
24
23
@@ -61,8 +60,10 @@ def partition_graph(graph: Dict[str, List[str]]) -> Set[Tuple[str, str]]:
61
60
for neighbor in uv_neighbors :
62
61
graph_copy [neighbor ].append (uv )
63
62
64
- contracted_nodes [uv ] = {contracted_node for contracted_node in
65
- contracted_nodes [u ].union (contracted_nodes [v ])}
63
+ contracted_nodes [uv ] = {
64
+ contracted_node
65
+ for contracted_node in contracted_nodes [u ].union (contracted_nodes [v ])
66
+ }
66
67
67
68
# Remove nodes u and v.
68
69
del graph_copy [u ]
@@ -75,8 +76,12 @@ def partition_graph(graph: Dict[str, List[str]]) -> Set[Tuple[str, str]]:
75
76
76
77
# Find cutset.
77
78
groups = [contracted_nodes [node ] for node in graph_copy ]
78
- return {(node , neighbor ) for node in groups [0 ]
79
- for neighbor in graph [node ] if neighbor in groups [1 ]}
79
+ return {
80
+ (node , neighbor )
81
+ for node in groups [0 ]
82
+ for neighbor in graph [node ]
83
+ if neighbor in groups [1 ]
84
+ }
80
85
81
86
82
87
if __name__ == "__main__" :
0 commit comments