I was working with this Dijkstra algorithm to find the shortest path.
For example :
direct way from a to b :5
direct way from b to c :2
direct way from a to c :9 ...then the shortest way from a to c would have a distance from 7, not 9.
the problem is: I thought I was adding numbers like 3.1, 2, 5.4, 6.7, 10.8, so numbers with only one digit after the decimal point, or natural numbers. but the result I got from this algorithm was like: 22.400000000000002.. and I have no idea why this happened.
import heapq  #you don't have to install this
def dijkstra(graph, start):
  distances = {node: float('inf') for node in graph}  
  distances[start] = 0  
  queue = []
  heapq.heappush(queue, [distances[start], start])  
  while queue:  
    current_distance, current_destination = heapq.heappop(queue)  
    if distances[current_destination] < current_distance:  
      continue
    
    for new_destination, new_distance in graph[current_destination].items():
      distance = current_distance + new_distance  
      if distance < distances[new_destination]: 
        distances[new_destination] = distance
        heapq.heappush(queue, [distance, new_destination]) 
    
  return distances
and the following is the 'graph'
graph = {
    index[1]: {index[2]: 5.3, index[22]: 11.3},
    index[2]: {index[3]:4.7},
    index[3]: {index[4]: 4.1, index[8]: 9.4, index[22]:4.3},
    index[4]: {index[5]: 2.5, index[8]: 4.6},
    index[5]: {index[6]: 4.6, index[10]:7.5, index[16]:10.3,index[22]:5.8},
    index[6]: {index[7]: 5.8},
    index[7] : {index[8]:6.7},
    index[8] : {index[9]:5.1},
    index[9] : {index[10]:3.7},
    index[10] : {index[11]:5.2,index[17]:17.5},
    index[11] : {index[12]:8.7,index[13]:6.7, index[22]:11.2},
    index[12] : {index[13]:4.3,index[16]:15.9},
    index[13] : {index[14]:3.3,index[15]:6.5},
    index[14] : {index[15]:9.7,index[16]:10.1},
    index[15] : {index[16]:2.9},
    index[16] : {index[17]:7.1,index[18]:2.4,index[22]:4.2},
    index[17] : {index[18]:4.7},
    index[18] : {index[19]:9,index[21]:3.2},
    index[19] : {index[20]:4.2},
    index[20] : {index[21]:4.2},
    index[21] : {index[22]:1.7},
    index[22] : {index[1]:11.3}
}
..and ''index' is...
index = {
    1:'a',
    2:'b',
    3:'c',
    4:'d',
    5:'e',
    6:'f',
    7:'g',
    8:'h',
    9:'i',
    10:'j',
    11:'k',
    12:'l',
    13:'m',
    14:'n',
    15:'o',
    16:'p',
    17:'q',
    18:'r',
    19:'s',
    20:'t',
    21:'u',
    22:'v'
}
print('from',index[5],'to',dijkstra(graph, index[5]))
Thanks!
 
    