Sesja
BFS
Dany jest graf o m krawędziach. Dla każdego wierzhołka wypisz jego odległość od wierzchołka numer 0.
Wejście
Pierwszy wiersz wejścia zawiera jedną liczbę całkowite m (0 ≤ m ≤ 10^6) oznaczającą liczbę krawędzi grafu zakończoną znakiem nowej linii. Wierzchołki są ponumerowane od 0 do n. W (i + 1)-szym wierszu wejścia znajduje się opis i-tej krawędzi; zawiera on liczby vi oraz ui (1 ≤ vi, ui ≤ n) oznaczające, że i-ta krawędź łączy wierzchołki vi oraz ui. Każda para wierzchołków jest połączona co najwyżej jedną krawędzią.Wyjście
Wyjście składa się z n liczb d1, d2, ..., dn oddzielonych pojedynczymi spacjami, z których i-ta oznacza odległość wierzchołka numer i od wierzchołka numer 0. Jeżeli nie istnieje droga między wierzchołkiem numer 0 i wierzchołkiem numer i, Twój program powinien wypisać −1.
Przykład
Wejście:
5
0 1
5 3
0 3
2 4
1 3
Wyjście:
0 1 -1 1 -1 2
Wskazówka:
Nie korzystaj z pythonowych bibliotek grafowych.
Najprościej można użyć słownika i listy jako stosu.
# tworzymy graf jako słownik list sąsiedztwa
graph = {}
edges = int(input()) # wczytujemy liczbę krawędzi
for i in range(edges): # dla każdej krawędzi
u,v = input().split()
if u not in graph: # jeśli u nie ma w grafie
graph[u] = [] # tworzymy dla niego pustą listę sąsiadów
if v not in graph: # jeśli v nie ma w grafie
graph[v] = [] # tworzymy dla niego pustą listę sąsiadów
graph[u].append(v) # dodajemy v do listy sąsiadów u
graph[v].append(u) # dodajemy u do listy sąsiadów v
Teraz wystarczy zaimplementować metodę BFS i w dodatkowej liście podczas odwiedzania wierzchołków zapisywać odległości wierzchołków od 0.
Rozwiązanych zadań 0:
engine by marwoj