При данных ограничениях можно создать искусственный граф, где каждая вершина соответствует вершине в исходном графе и некоторому запасу топлива (я обозначу такую вершину как (v, f) - в вершине v с топливом f).
Вершин в таком графе будет до 500*10000. Для каждого ребра v->u длинной l в исходном графе создаем ребро из вершины (v, f) в вершину (u, f-l) для всех f (т.е. из вершины v, имея f топлива, можно попасть в вершину u, имея f-l топлива). Эти ребра ценой 0. Также, в каждую вершину v, где есть заправка, добавьте ребро (v, f) -> (v, n) ценой 1 (заправились до упора). В графе будет до 500*10000 + 500*10000 ребер.
Теперь запустите там обход в ширину с двумя очередями или deque из вершины (start, n) пока не найдете путь в любую вершину (finish, f). Длина пути будет равна количеству заправок. Преходы по ребрам ценой 1 - это процесс заправки, по ребрам цены 0 - просто передвижения в исходном графе.
Это известное обобщение обхода в ширину на 0-1 графе:
Когда берете вершину из deque и смотрите всех ее соседей, если длина ребра до соседа 1, то кладете конец ребра в конец deque, а если цена 0 - то в начало. С двумя очередями делается так: пока очереди не пусты, берем вершину из текущей очереди и кладем ее соседей на расстоянии 0 в конец той же очереди, а соседей через ребро длины 1 - во вторую очередь. Когда текущая очередь опустеет, переходим к другой и так далее.