Статья Автор: Деникина Н.В., Деникин А.В.

Кратчайший путь в графе из файла — Что ещё могут спросить

Одна программа — семь вопросов

Задание новое, и что будет в вариантах не известно (вероятно спросят про длину кратчайшего пути, но неплохо бы уметь считать всё).

Но, почти всё сводится к замене одной строки в Форде–Беллмане.


Таблица замен

что спрашиваютчто писать вместо dist[j] = min(dist[j], dist[i] + w)
кратчайший путьтак и оставить
самый длинный путьmax, и стартовать от -inf
наименьшее число рёберmin(dist[j], dist[i] + 1)
самое лёгкое узкое местоmin(dist[j], max(dist[i], w))
сколько вершин достижимоничего, посчитать не-бесконечности
путь из X в Yничего, поменять стартовую вершину
путь через вершинуничего, взять Флойда

Меняется одна строка.

Узкое место

Формулировка звучит так: найти путь, в котором самое тяжёлое ребро как можно легче. Веса не складываются — вдоль пути берётся максимум, и уже его мы минимизируем. Так спрашивают про грузовик, который не проедет по слабому мосту: важен не весь маршрут, а худший мост на нём.


Ловушки

  • Спросили число рёбер, посчитали длину.
  • В узком месте сложили веса вместо максимума.
  • Посчитали все вершины файла, а спрашивали достижимые из единицы.
  • Считая достижимые, пробежали range(1001) и получили лишние ячейки. Считать надо те, где рекорд перестал быть бесконечностью.

Проверь себя


Файл graph.txt: отметьте вершины, до которых из вершины 1 добраться нельзя.

Файл graph.txt: целая часть веса самого тяжёлого ребра в пути из 1 в 31, где это ребро как можно легче.
Attached files
graph.txt
Печать