예제 #1
0
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
예제 #2
0
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