I’ve been trying to trace Dijkstra’s shortest path algorithm for the following undirected graph:
(B)
/ \
/ \
6 / \ 9
/ \
/ \
/ \
(A)- 5 -(C)- 1 -(F)----2----(I)
\ /
\ /
4 \ / 2
\ /
\ /
\ /
(D)
For clarification:
(N) will represent nodes, numbers with no formatting will represent weights.
the edge between A and C has a weight of 5,
the edge between C and F has a weight of 1.
I’ll outline my process here:
Since A is my initial node, the algorithm begins here. Since D is the cheaper path, the algorithm traverses to D. A is now marked as visited, meaning we cannot traverse to it again.
At D it is easy to see that we will move to F.
F is where I start having trouble. Since the shortest path will lead me to C, I’m stuck between two visited nodes with no way to get to I. Can anyone help me?
EDIT: Sorry about the graph guys, this question was originally asked from a phone. I’ll get that fixed asap.
The way you are working on it is wrong. “At D it is easy to see that we will move to F” that is not true. You first visit D, then C, not F. Take a careful look at the algorithm and what it does.
At first you visit A so you have the following cost: 6 to B, 5 to C, 4 to D and INFINITE for the rest of the nodes.
You first go to D. You now update your cost to go from A to F (passing through D) to 6. Your next node to visit is not D, it is C as it has the lowest cost (5) of all the unvisited nodes. The cost of going from A to F passing through C is 6 which is already the cost you have so there is not need to update.
From there you have a tie of 6 between B and F. Let’s say you first go to B, then nothing happens since the shortest path to F is already 6, while passing through B to go to F would cost 15, which is more expensive than the cost you already have so don’t update the cost. Then you visit F since it has the lowest cost of all the unvisited nodes. From there you update your path to I which it won’t be INFINITE anymore but 8.
As result, your shortest path from A to I is the following sequence: A – D – F – I .