Cod sursa(job #2533347)

Utilizator TeodorCotetCotet Teodor TeodorCotet Data 28 ianuarie 2020 22:07:06
Problema BFS - Parcurgere in latime Scor 50
Compilator py Status done
Runda Arhiva educationala Marime 1.08 kb
import math, queue

def read_gen(fname):
    with open(fname, 'rt') as fin:
        for line in fin:
            for val in line.split():
                yield int(val)

def bfs(source, n, g):
    dist = {x: math.inf for x in range(1, n + 1)}
    used = {x: False for x in range(1, n + 1)}
    q = queue.Queue(maxsize=n)
    q.put(source)
    used[source] = True
    dist[source] = 0

    while q.empty() == False:
        node = q.get()
        for x in g[node]:
            if used[x] == False:
                used[x] = True
                q.put(x) 
                dist[x] = dist[node] + 1
    return dist


if __name__ == "__main__":
    it = read_gen('bfs.in')
    n, m, s = next(it), next(it), next(it)
    g = {x: [] for x in range(1, n + 1)}
    for _ in range(m):
        x, y = next(it), next(it)
        g[x].append(y)

    dist = bfs(s, n, g)
    with open('bfs.out', 'wt') as fout:
        for i in range(1, n + 1):
            if dist[i] == math.inf:
                v = -1
            else:
                v = dist[i]
            fout.write('{} '.format(v))
        fout.write('\n')