Exemplo n.º 1
0
from utils.graphs import edge_list, adjacency_list


def visit(a_list, curr_v, visited):
    visited[curr_v - 1] = True
    for v in a_list[curr_v - 1]:
        if not visited[v - 1]:
            visit(a_list, v, visited)


def count_components(edges, n):
    visited = [False] * v_count
    a_list = adjacency_list(edges, n)
    components_count = 0
    while not all(visited):
        curr_v = visited.index(False) + 1
        visit(a_list, curr_v, visited)
        components_count += 1
    return components_count


with open('graph.txt') as file:
    v_count, _, edge_list = edge_list(file)
    res = count_components(edge_list, v_count)
    print(res)
Exemplo n.º 2
0
 def test_adjacency_list(self):
     v_count, _, edges = edge_list(self.edge_list)
     expected_list = [[2], [1, 3, 4], [2, 4], [3, 2], []]
     actual_list = adjacency_list(edges, v_count)
     self.assertListEqual(expected_list, actual_list)
Exemplo n.º 3
0
 def test_degree_list(self):
     v_count, _, edges = edge_list(self.edge_list)
     actual_list = degree_list(edges, v_count)
     self.assertListEqual([1, 3, 2, 2, 0], actual_list)
Exemplo n.º 4
0
 def test_edge_list(self):
     expected_edges = [(1, 2), (2, 3), (4, 3), (2, 4)]
     v_count, e_count, edges = edge_list(self.edge_list)
     self.assertEqual(v_count, 5)
     self.assertEqual(e_count, 4)
     self.assertEqual(edges, expected_edges)
Exemplo n.º 5
0
    return d


def adjacency_list(edges, n):
    a = [[] for _ in range(n)]
    for u, v in edges:
        a[u - 1].append(v)
    return a


def breadth_first_search_queue(edges, n):
    a_list = adjacency_list(edges, n)
    visited = [True] + [False] * (n - 1)
    d = [0] + [-1] * (n - 1)
    q = [1]
    while q:
        curr_v = q.pop(0)
        for v in a_list[curr_v - 1]:
            if not visited[v - 1]:
                q.append(v)
                d[v - 1] = d[curr_v - 1] + 1
                visited[v - 1] = True
    return d


with open('graph.txt') as file, open('res.txt', 'w') as res_file:
    v_count, _, graph = edge_list(file)
    dist_list = breadth_first_search_queue(graph, v_count)
    res = ' '.join(map(str, dist_list))
    res_file.write(res)
Exemplo n.º 6
0
from utils.graphs import adjacency_list, degree_list, edge_list


def double_degree_list(edges, n):
    d_list = degree_list(edges, n)
    a_list = adjacency_list(edges, n)
    return [sum(map(lambda v: d_list[v - 1], v_list)) for v_list in a_list]


with open('graph.txt') as edges_file:
    v_count, _, graph = edge_list(edges_file)
    dd_list = double_degree_list(graph, v_count)
    print(*dd_list)