Pagini recente » Cod sursa (job #80936) | Cod sursa (job #1782930) | Cod sursa (job #2184675) | Cod sursa (job #660476) | Cod sursa (job #2924775)
def citire_lista_adiacenta(orientat: bool = False, fisier: str = "bfs.in"):
with open(fisier) as f:
nr_noduri, nr_muchii, start = [int(x) for x in f.readline().split()]
lista = [[] for _ in range(nr_noduri + 1)]
for i in range(nr_muchii):
linie = f.readline().split()
if orientat:
lista[int(linie[0])].append(int(linie[1]))
else:
lista[int(linie[0])].append(int(linie[1]))
lista[int(linie[1])].append(int(linie[0]))
return lista, start
def BFS():
lista, start = citire_lista_adiacenta(orientat=True)
vizitat = [False] * len(lista)
coada = []
coada.append(start)
vizitat[start] = True
distanta = [None] * len(lista)
distanta[start] = 0
while coada:
nod = coada.pop(0)
for vecin in lista[nod]:
if not vizitat[vecin]:
coada.append(vecin)
vizitat[vecin] = True
distanta[vecin] = distanta[nod] + 1
for i in range(1, len(distanta)):
if distanta[i] is None:
distanta[i] = -1
print(*distanta[1:])
if __name__ == "__main__":
BFS()
# expected output:
# 1 0 2 -1 1