Алгоритм для расчета путей
Есть 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 шт):
Связный (надо полагать) граф из n узлов и n-1 рёбер есть дерево.
Первым делом проверяем степени всех узлов (количество смежных узлов, оно же количество рёбер из данного узла). Если степени только 1 и 2 - дерево линейное, и подойдёт любая вершина.
Иначе удаляем все узлы со степенью 2, соединяя смежные им. Таким образом, остаётся дерево с "магистралями".
Теперь ищем центр дерева. Для этого поэтапно: находим все вершины со степенью 1 (листья); удаляем их. Снова находим, снова удаляем. Повторяем пока не останется одна или две вершины - это и есть центр. Вот некая реализация данного этапа.