Запоминаем, откуда пришли
Тут придётся отказаться от min: он молча возвращает меньшее и не говорит, сработало улучшение или нет. Пишем явное сравнение и внутри него запоминаем ребро.
prev[j] = i пишется внутри if, а не рядом с ним. Иначе в памяти осядет последнее ребро файла, а не лучшее.
Как разворачивается путь
Встаём в вершину 100 и шагаем назад: prev[100], потом prev от неё, и так до единицы. Получается путь задом наперёд — разворачиваем.
Рёбра и вершины — разные числа
В пути из четырёх вершин три ребра. Спрашивают количество рёбер — вычитай единицу.
Когда кратчайших путей несколько
Тогда восстановится один из них — тот, который программа нашла последним. Длина у всех одинаковая, а число рёбер может отличаться, поэтому в корректном задании кратчайший путь единственный.