Cod sursa(job #2797517)

Utilizator lazarstefania63@yahoo.comLazar Stefania [email protected] Data 10 noiembrie 2021 01:56:49
Problema BFS - Parcurgere in latime Scor 10
Compilator py Status done
Runda Arhiva educationala Marime 1.71 kb
from collections import deque

adj_list = {}
my_list = []


def add_node(node):
    if node not in my_list:
        my_list.append(node)


def add_edge(node1, node2, my_graph):
    temp = []
    if node1 in my_list and node2 in my_list:
        if node1 not in my_graph:
            temp.append(node2)
            my_graph[node1] = temp
        elif node1 in my_graph:
            temp.extend(my_graph[node1])
            temp.append(node2)
            my_graph[node1] = temp


def read():
    n, m, s = [int(x) for x in f.readline().split()]
    for i in range(1, n + 1):
        add_node(i)
    for i in range(m):
        x, y = [int(z) for z in f.readline().split()]
        if x in adj_list:
            if y not in adj_list[x]:
                add_edge(x, y, adj_list)
        else:
            add_edge(x, y, adj_list)
    return n, m, s


def bfs(my_graph, starting_node):
    distance = {}
    for node in my_graph:
        distance[node] = -1
    distance[starting_node] = 0
    path = 0
    queue, result, visited = [starting_node], [starting_node], []
    while queue:
        node = queue.pop(0)
        visited.append(node)
        aux = []
        for n in my_graph[node]:
            if n not in visited:
                queue.append(n)
                aux.append(n)
        if aux:
            path += 1
            for node0 in aux:
                distance[node0] = path
                if node0 not in result:
                    result.append(node0)
    return distance


f = open("bfs.in", "r")
f_out = open("bfs.out", "w")
N, M, S = read()
bfs_result = bfs(adj_list, S)
sorted_items = sorted(bfs_result.items())
for x in sorted_items:
    f_out.write(str(x[1])+' ')