Мне нужно доказать рекурсивный алгоритм. Обычно это делается с использованием некоторого целочисленного значения внутри кода в качестве базового случая для индукции, например, при вычислении факториала, но с обходным графиком. Я не знаю, с чего начать. Вот мой алгоритм. Подписчики не конвертировались.Доказательство рекурсивного алгоритма
Алгоритм
Гол: траверса график, создавая глубину первой связующего дерева, и вычислить последний потомок каждой вершины, которая является потомок VK, который имеет самое высокое значение к
Вход: A connected graph G with vertices ordered v1, v2, v3 … vn
Выход: A spanning tree T where each vertex in T has had its Last vertex computed
Инициализация Устанавливает каждую вершину на невидимую. Пусть ak обозначает список всех вершин, смежных с vk. Обозначим через lk Последний потомок vk. Обозначим через ck список всех дочерних элементов vk в остовном дереве. Пусть dk обозначает список всех вершин, являющихся потомками vk в охватывающем дереве, включая vk.
dfs(vk){
add vK to T
set v to visited
lk = vk
add vk to dk
foreach(vertex m in ak with lowest value of k){
add m to ck
add dfs(m) to dk
}
foreach(vertex vc in dk){
if(c > k){
lk = vc
}
}
if(k = 1)
return T
else
return dk
}
Это для группового проекта в школе, так что я не хочу все доказательства, но отправную точку и некоторое направление было бы весьма признателен.
Стоит отметить, что вам не нужно создавать список 'dk'. Каждая «вершина» последнего вершины будет либо самой вершиной, либо «последним потомком» одного из ее детей, поэтому 'lk' - это все, что вам нужно. Вы можете использовать только один цикл, и вам не нужно возиться с разными значениями возврата в разных ситуациях. – Blckknght