Алгоритм для расчета путей

Есть n пунктов. Между ними n - 1 путей. Несколько последовательных путей объединяются в магистрали. Необходимо выбрать главный пункт, чтобы к нему можно было добраться с любого пункта через как можно меньшее количество магистралей. Я создал цикл в котором n - 1 строк с путями превращаются в массивы и складываются в другой массив(вложенные массивы). Помогите, пожалуйста. Заранее благодарен за внимание оказанную помощь! Входные данные:

n
n - 1 строк в которых указаны пути

Например n = 5

1. 2 3
2. 1 2
3. 4 1
4. 1 5 

P.S.Вот код:

arr = []
n = int(input())
k = n - 1
for i in range(0, k):
    a = input()
    b = [a]
    arr.append(b)

P.P.S.Можно только алгоритм, без кода.


Ответы (1 шт):

Автор решения: MBo

Связный (надо полагать) граф из n узлов и n-1 рёбер есть дерево.

Первым делом проверяем степени всех узлов (количество смежных узлов, оно же количество рёбер из данного узла). Если степени только 1 и 2 - дерево линейное, и подойдёт любая вершина.

Иначе удаляем все узлы со степенью 2, соединяя смежные им. Таким образом, остаётся дерево с "магистралями".

Теперь ищем центр дерева. Для этого поэтапно: находим все вершины со степенью 1 (листья); удаляем их. Снова находим, снова удаляем. Повторяем пока не останется одна или две вершины - это и есть центр. Вот некая реализация данного этапа.

→ Ссылка