Pagini recente » Cod sursa (job #2639658) | Cod sursa (job #2492310) | Cod sursa (job #617606) | Cod sursa (job #154689) | Cod sursa (job #2533347)
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')