BFS поможет вам найти все кратчайшие пути от определенного узла .Если вы хотите использовать BFS, чтобы найти минимальный путь между каждой парой узлов в графе, вам нужно будет запускать BFS практически из каждого узла (почти из каждого узла, потому что у вас уже будут рассчитываться некоторые листы).
Вот как найти расстояние между двумя узлами.Используя BFS на вершине a (произвольной вершине), вы сможете найти все кратчайшие пути (расстояния) до других вершин.Для расчета расстояния вам понадобится «счетчик уровня».Вот псевдокод, который поможет вам сделать это:
q = new Queue()
dist_array = new Array(N) //and Set each value to infinity
distance=0
q.enqueue(a) //a is the selected node
dist_array[a] = 0
while q not empty:
v = q.dequeue()
++distance
for each neighbor x of v:
if distance_array[x] < infinity:
continue
d[x] = distance
q.enqueue(x)
скажем, что ваш график имеет вид G = (V, E), когда:
- V = {a, b, c, d, e, f}, | V |= N = 6
- E = {(a, b), (a, c), (a, e), (b, d), (b, e), (d, f)},| E |= M = 6
Если мы запустим этот код на нашем графике, мы получим следующий результат
dist=1: a->b, a->c, a->e
dist=2: a->d
dist=3: a->f