Изменения

Перейти к: навигация, поиск

Обход в ширину

199 байт добавлено, 18:58, 6 ноября 2018
м
переформулировано доказательство ут. 1
Докажем это утверждение индукцией по числу выполненных алгоритмом шагов.
'''База'''Введем дополнительный инвариант: изначально очередь содержит только одну вершину у любых двух вершин из очереди, расстояние до <tex> s </tex> с расстоянием отличается не более чем на <tex> 0 1 </tex>, утверждение верно.
'''База''': изначально очередь содержит только одну вершину <tex> s </tex>.  '''Переход''': пусть после <tex> l i-й </tex>-ого шага алгоритма очередь содержит итерации в очереди <tex> p a + 1 </tex> вершин с расстоянием <tex> k x </tex> и <tex> q b </tex> вершин с расстоянием <tex> k x + 1 </tex>. Тогда на  Рассмотрим <tex> l+1 i-ю </tex>-ом шаге мы извлечем из итерацию. Из очереди одну достаем вершину и добавим в нее все непосещенные(<tex> r v </tex> вершин), связанные с ней; расстояние до них, очевидно, будет равно расстоянием <tex> k + 1 x </tex>. У нас останется Пусть у v есть <tex> p - 1 r </tex> (возможнонепосещенных смежных вершин. Тогда, после их добавления, в очереди находится <tex> 0 a </tex>) вершин с расстоянием <tex> k x </tex> и , после них, <tex> q b + r </tex> вершин с расстоянием <tex> k x + 1 </tex>.  Оба инварианта сохранились, что соответствует нашему инварианту.<tex> \Rightarrow </tex> после любого шага в очереди элементы неубывают
}}
'''while''' Q <tex> \ne \varnothing </tex>
u = Q.pop()
'''for''' v: (u, v, u) '''in''' E
'''if''' d[v] == <tex> \infty </tex>
d[v] = d[u] + 1
54
правки

Навигация