Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from collections import defaultdict
- def get_true_adjacency_dict(adj_list):
- adjacency_dict = defaultdict(list)
- for a, b in adj_list:
- adjacency_dict[a].append(b)
- adjacency_dict[b].append(a)
- return dict(adjacency_dict)
- def get_adjacency_matrix(adjacency_dict):
- def create_defaultdict_int():
- return defaultdict(int)
- adjacency_matrix = defaultdict(create_defaultdict_int)
- for node, linked_nodes in adjacency_dict.items():
- for linked_node in linked_nodes:
- adjacency_matrix[node][linked_node] += 1
- adjacency_matrix[node] = dict(adjacency_matrix[node])
- adjacency_matrix = dict(adjacency_matrix)
- return adjacency_matrix
- def get_max_grade(adjacency_matrix):
- return sum(max(adjacency_matrix.values(), key=lambda x: sum(x.values())).values())
- def count_loops(adjacency_matrix):
- return len([1 for node, linked_nodes in adjacency_matrix.items() if
- linked_nodes.get(node, 0) > 0])
- def has_parallel(adjacency_matrix):
- for node, linked_nodes in adjacency_matrix.items():
- for linked_node, link_nbr in linked_nodes.items():
- if linked_node != node and link_nbr > 1:
- return True
- return False
- def get_graph_info(adj_list):
- """
- >>> get_graph_info([[0,1],[2,3],[4,3]])
- (2, 0, False)
- >>> get_graph_info([[0,1],[0,1],[0,0],[2,3],[4,3]])
- (4, 1, True)
- >>> get_graph_info([[1, 3], [1, 4], [4, 5], [1, 3], [3, 2], [5, 2], [5, 5], [3, 4]])
- (4, 1, True)
- """
- adjacency_dict = get_true_adjacency_dict(adj_list)
- adjacency_matrix = get_adjacency_matrix(adjacency_dict)
- max_grade = get_max_grade(adjacency_matrix)
- loops_nbr = count_loops(adjacency_matrix)
- parallel = has_parallel(adjacency_matrix)
- return max_grade, loops_nbr, parallel
Add Comment
Please, Sign In to add comment