Проблема может быть описана следующим образом:
Произошел сбой в сети узлов, и каждое соединение (ребро) имеет определенное время восстановления, пока не вернется в оперативный режим, и оба узла не будут снова подключены. Наша цель - найти путь между узлами с 1 по n, который работает и работает самый ранний, и вернуть самое длинное время восстановления на этом пути.
Сеть может быть представлена в виде графа с ненаправленными ребрами.
У нас есть три массива:
- Первая содержит исходные вершины
- Второй содержит вершины назначения
- Третий содержит время восстановления каждого соединения (ребра)
Пример:
{1,2,2,3}, {2,3,4,4}, {1,5,10,2}
где время восстановления соединения между узлами 1 и 2 равно 1 и т. Д.
Оптимальный путь от 1 до n = 4 - 1-2-3-4, так как самое длительное время восстановления на этом пути - 5, по сравнению с путем 1-2-4, где самое длинное время восстановления - 10 .
Здесь важно отметить, что только самое длинное время восстановления на каждом пути имеет значение, то есть «длина» пути - это не сумма периодов ожидания, а продолжительность самого длинного времени, которое есть у человека. ждать восстановления соединения между двумя узлами. Каждое время восстановления вычисляется из t = 0, поэтому время восстановления является независимым, и порядок не имеет значения.
Итак, нам нужно найти путь с минимальным временем восстановления из максимального времени восстановления на каждом пути и вернуть это время.
Я подошел к этой проблеме, используя оба алгоритма Дейкстры и Беллмана-Форда, но не могу по-настоящему обдумать, как изменить алгоритмы, чтобы получить желаемый результат. Может быть не более 10 ^ 5 соединений.