def random_weighted_graph_resolver(data, _): def random_matrix(size, p): adj_matrix = [['.'] * size for i in range(size)] for i in range(size): for j in range(i, size): if i != j and random.random() < p: # 0.4 - probability that edge between i and j exists adj_matrix[i][j] = adj_matrix[j][i] = 1 return adj_matrix size = int(data.split(' ')[0]) p = float(data.split(' ')[1]) if size < 0: return "Size cannot be a negative number" matrix = random_matrix(size, p) graph = Graph.from_cost_matrix(matrix) components = Algorithms.max_connected_comp(graph) while len(components) > 1: matrix = random_matrix(size, p) graph = Graph.from_cost_matrix(matrix) components = Algorithms.max_connected_comp(graph) for i in range(size): for j in range(i, size): if matrix[i][j] == 1: matrix[i][j] = matrix[j][i] = random.randrange(1, 11) s = "" for row in matrix: s += f"{' '.join([f' {cell}' if len(str(cell)) == 1 else f'{cell}' for cell in row])}\n" return s
def max_connected_comp_resolver(graph: Graph, args): components = Algorithms.max_connected_comp(graph) result = "" max_component_index = 0 for i, component in enumerate(components): result += f"{i}) {component}\n" if len(component) == max([len(comp) for comp in components]): max_component_index = i result += f"Largest component have an index of {max_component_index}\n" return result