Advertisement
nq1s788

Untitled

Dec 22nd, 2024
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.84 KB | None | 0 0
  1. Особенность bfs в том, что он обходит вершины кратчайшим до них путем от стартовой. Поэтому мы просто можем запустить bfs от стартовой вершины, а для того чтобы восстановить путь, будем для каждой вершины сохранять, из какой мы пришли в нее. И начиная от конечной, запишем вершину из которой мы пришли в нее, потом вершину из которой мы пришли в ту, их которой пришли в конечную, и так далее, пока не дойдем обратно до стартовой, и весь этот список развернем, чтобы путь был в нужном порядке.
  2.  
  3. Если бы нам не нужно было восстанавливать путь, а только найти его длину, достаточно было бы для каждой вершины поддерживать, какое расстояние мы до нее проделали (расстояние до той, из которой мы пришли + 1)
  4.  
  5. Пример кода на python:
  6. from queue import Queue
  7. n, m = map(int, input().split())
  8. g = [[] for i in range(n)]
  9. for i in range(m):
  10.     x, y = map(int, input().split())
  11.     x -= 1
  12.     y -= 1
  13.     g[x].append(y)
  14. s, t = map(int, input().split())
  15. s -= 1
  16. t -= 1
  17. p = [-1] * n
  18. p[s] = -2
  19. q = Queue()
  20. q.put(s)
  21. while not q.empty():
  22.     h = q.get()
  23.     for e in g[h]:
  24.         if p[e] == -1:
  25.             p[e] = h
  26.             q.put(e)
  27. if p[t] == -1:
  28.     print(-1)
  29. else:
  30.     answ = []
  31.     while t != -2:
  32.         answ.append(t + 1)
  33.         t = p[t]
  34.     print(len(answ) - 1)
  35.     print(*reversed(answ))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement