An alternative algorithm for finding the shortest path from the root (v_{0}) to each vertex (v) in
Question:
An alternative algorithm for finding the shortest path from the root \(v_{0}\) to each vertex \(v\) in a directed graph, called Dijkstra's algorithm, is as follows. Initialize the cost \(C(v)\) of a path to vertex \(v\) to be \(c\left(v_{0}, v\right)\) if there is such an edge, and \(+\infty\) otherwise. Initialize a "special" set of vertices \(S\) to be \(\left\{v_{0}\right\}\), and initialize the predecessor of \(v\) to be \(P(v)=v_{0}\) for all \(v eq v_{0}\). Then do the following loop \(n-1\) times, i.e., until \(S\) contains all vertices:
1. Select a vertex \(w otin S\) such that \(C(w)\) is minimized.
2. Put \(w\) into \(S\).
3. Revise the costs \(C(v)\) for \(v otin S\) (to reflect any cost reduction) by \(C(v)=\min \{C(v), C(w)+c(w, v)\}\) if there is an edge \((w, v)\).
4. For each \(v otin S\), if the minimum in step 3 is \(C(w)+c(w, v)\) (i.e., cost was reduced), then label the predecessor of \(v\) as \(P(v)=w\).
Then, to find the minimal path to each \(v\), trace the path from \(v_{0}\) to \(v\) by backtracking through predecessors: \(P(v), P(P(v)), \ldots, v_{0}\). Write a Mathematica command to implement Dijkstra's algorithm. (Hint: To break down this rather difficult program into manageable pieces, consider writing some supporting functions to do smaller tasks that the main Dijkstra program needs, such as revising the costs and predecessors in steps 3 and 4 , and producing the path to each vertex given the predecessor list, etc.)
Step by Step Answer:
Introduction To The Mathematics Of Operations Research With Mathematica
ISBN: 9781574446128
1st Edition
Authors: Kevin J Hastings