1 2
2 3
1 3
this.indexes.set(this.heapContainer[indexOne], indexOne);
this.indexes.set(this.heapContainer[indexTwo], indexTwo);
this.indexes.set(this.heapContainer[0], 0);
indexes[heapContainer[indexToRemove]] = indexToRemove;
сделать.if (!distances.get(child[0]) || distances.get(child[0]) > newdistance)
// x,y - точка от которой ищем +1м вверх
// -180 <=x<=180, -90<=y<=90.
l = 0
// required_dist - нужное приращение
r = min(180, 90-y);
while r-l < 1e-10:
m=(r+l)/2;
dist = haversine((x,y),(x,y+m)); // Формула для расстояния между точками.
if dist > required_dist: r = m
else l = m
step = l; // шаг по широте, чтобы сдвинутся на required_dist.
Сумма и там и там одинаковая: 401.
Если хотите проверить, вставьте в текстовый файл "348 157 159" в первую строку, а потом ваши ребра (начало, конец, длина). Скомпилировать можно вот этой коммандой:
Скормить текстовый файл можно через командную строку
dijkstra.exe <input.txt
.Мой код чуть проще того minHeap что у вас используется, потому что там слишком общий. Можете попробовать так же обрезать ваш, но в 20 раз вы ускорения не получите.
Эти 20 раз - это объекты, мапы везде вместо тупых интов и массивов.