Please note, this is a STATIC archive of website www.tutorialspoint.com from 11 May 2019, cach3.com does not collect or store any user information, there is no "phishing" involved.
Tutorialspoint

Dijkstra algorithm - Shortest paths between nodes graph

def shortest_paths_to_source(graph, source)
    distance_to_source_for = {}
    prev_node_for = {}
    
    distance_to_source_for[source] = 0
    pq = PriorityQueue.new
    
    graph.nodes.each do |node|
        if node != source
            distance_to_source_for[node] = +1.00/0.00 #infinity
            prev_node_for[node] = nil
        end
        pq.add_with_priority(node, distance_to_source_for[node])
    end
    
    while !(pq.is_empty?)
        current_node = pq.pop #lowest priority node
        current_node.adjacent_nodes.each do |adjacent_node|
            distance = distance_to_source_for[current_node] + distance_between(current_node, adjacent_node)
            if distance < distance_to_source_for[adjacent_node]
                distance_to_source_for[adjacent_node] = distance
                prev_node_for[adjacent_node] = current_node
                pq.decrease_priority(adjacent_node, distance_to_source_for[adjacent_node])
            end
        end
    end
    [distance_to_source_for, prev_node_for]
end

Advertisements
Loading...

We use cookies to provide and improve our services. By using our site, you consent to our Cookies Policy.