next up previous contents index Search
Next: Analysis Up: 0.4 Graph Algorithms Previous: 0.4.3 Floyd's Algorithm -

0.4.4 Dijkstra's Algorithm - Shortest Path

While Floyd's algorithm determines the lowest-cost path between all vertices in a graph, Dijkstra's was designed to find the lowest cost path between a single starting vertex and all of the other vertices in a graph. Dijkstra's can, clearly, be used to obtain the same information as Floyd's algorithm if it is called repeatedly for every vertex in a graph.  

Dikjstra's algorithm is a greedy algorithm which     means, if given a choice, it operates by choosing the biggest or most valuable alternative.

The first step of this algorithm is to "label" the starting vertex with an ordered pair, (-,0), and initialize a distance counter to one. Next, look at all edges between labeled vertices and unlabeled vertices. If the cost of a particular edge added to the second item in the ordered pair of the initial vertex is equal to the distance counter, label the terminal vertex of this edge (name_of_starting_vertex, distance_counter) and continue this process, incrementing the distance counter by one at each iteration and continuing until all vertices in the graph are labeled. The second member of the ordered pair at each vertex is the lowest cost walk from it to the starting vertex. The first member of the ordered pair of the ordered pair is the node immediately preceding the current node on the shortest path from source to destination.

The algorithm actually coded is implemented in a slightly different manner. Because it is inefficient to store the distance counter and look at every edge at every increment, I choose to begin at the starting vertex and traverse to all nodes reachable from it. Each node is labelled with a distance from the start and a previous vertex. Each node is also enqueued for later processing.

Once all nodes adjacent to the starting vertex are processed, labelled and enqueued, the algorithm dequeues the first node. All nodes adjacent to this vertex that have not been visited are labelled and enqueued. Additionally, any node that has been visited but can be reached more cheaply is re-labelled and enqueued.

This process continues until the queue is empty. The shortest path to a given vertex n is labelled on that vertex. The path can be determined by examining the prior steps recursively back to the starting node.

Scott Gasch