VikkaLorel

get_graph_info

Dec 23rd, 2020 (edited)
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.83 KB | None | 0 0
  1. from collections import defaultdict
  2.  
  3.  
  4. def get_true_adjacency_dict(adj_list):
  5.     adjacency_dict = defaultdict(list)
  6.     for a, b in adj_list:
  7.         adjacency_dict[a].append(b)
  8.         adjacency_dict[b].append(a)
  9.     return dict(adjacency_dict)
  10.  
  11.  
  12. def get_adjacency_matrix(adjacency_dict):
  13.     def create_defaultdict_int():
  14.         return defaultdict(int)
  15.  
  16.     adjacency_matrix = defaultdict(create_defaultdict_int)
  17.     for node, linked_nodes in adjacency_dict.items():
  18.         for linked_node in linked_nodes:
  19.             adjacency_matrix[node][linked_node] += 1
  20.         adjacency_matrix[node] = dict(adjacency_matrix[node])
  21.     adjacency_matrix = dict(adjacency_matrix)
  22.     return adjacency_matrix
  23.  
  24.  
  25. def get_max_grade(adjacency_matrix):
  26.     return sum(max(adjacency_matrix.values(), key=lambda x: sum(x.values())).values())
  27.  
  28.  
  29. def count_loops(adjacency_matrix):
  30.     return len([1 for node, linked_nodes in adjacency_matrix.items() if
  31.                 linked_nodes.get(node, 0) > 0])
  32.  
  33.  
  34. def has_parallel(adjacency_matrix):
  35.     for node, linked_nodes in adjacency_matrix.items():
  36.         for linked_node, link_nbr in linked_nodes.items():
  37.             if linked_node != node and link_nbr > 1:
  38.                 return True
  39.     return False
  40.  
  41.  
  42. def get_graph_info(adj_list):
  43.     """
  44.    >>> get_graph_info([[0,1],[2,3],[4,3]])
  45.    (2, 0, False)
  46.    >>> get_graph_info([[0,1],[0,1],[0,0],[2,3],[4,3]])
  47.    (4, 1, True)
  48.    >>> get_graph_info([[1, 3], [1, 4], [4, 5], [1, 3], [3, 2], [5, 2], [5, 5], [3, 4]])
  49.    (4, 1, True)
  50.    """
  51.     adjacency_dict = get_true_adjacency_dict(adj_list)
  52.  
  53.     adjacency_matrix = get_adjacency_matrix(adjacency_dict)
  54.     max_grade = get_max_grade(adjacency_matrix)
  55.     loops_nbr = count_loops(adjacency_matrix)
  56.     parallel = has_parallel(adjacency_matrix)
  57.     return max_grade, loops_nbr, parallel
  58.  
Add Comment
Please, Sign In to add comment