Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Особенность bfs в том, что он обходит вершины кратчайшим до них путем от стартовой. Поэтому мы просто можем запустить bfs от стартовой вершины, а для того чтобы восстановить путь, будем для каждой вершины сохранять, из какой мы пришли в нее. И начиная от конечной, запишем вершину из которой мы пришли в нее, потом вершину из которой мы пришли в ту, их которой пришли в конечную, и так далее, пока не дойдем обратно до стартовой, и весь этот список развернем, чтобы путь был в нужном порядке.
- Если бы нам не нужно было восстанавливать путь, а только найти его длину, достаточно было бы для каждой вершины поддерживать, какое расстояние мы до нее проделали (расстояние до той, из которой мы пришли + 1)
- Пример кода на python:
- from queue import Queue
- n, m = map(int, input().split())
- g = [[] for i in range(n)]
- for i in range(m):
- x, y = map(int, input().split())
- x -= 1
- y -= 1
- g[x].append(y)
- s, t = map(int, input().split())
- s -= 1
- t -= 1
- p = [-1] * n
- p[s] = -2
- q = Queue()
- q.put(s)
- while not q.empty():
- h = q.get()
- for e in g[h]:
- if p[e] == -1:
- p[e] = h
- q.put(e)
- if p[t] == -1:
- print(-1)
- else:
- answ = []
- while t != -2:
- answ.append(t + 1)
- t = p[t]
- print(len(answ) - 1)
- print(*reversed(answ))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement