Imagine a graph - by which we mean dots and lines, vertices and edges, not x vs. y. Now imagine that each edge has a weight. This weight tells us how much it costs to go across that edge. It tells us what that edge's toll is. What is the cheapest way to get from point A to point B?

This problem stymied computer scientists for a while, and they came up with all these good ideas that never seemed quite right. Eventually, Dijkstra figured it all out, but there was still a problem: it was really hard to understand if you weren't already a computer scientist. So here is the best explanation of dijkstra's algorithm I have ever found. It is not 100% right, but it is much more right than it is wrong, and intuition is important here.

Imagine that instead of edges with costs, the edges are bits of string of different lengths. If the toll was $5.50, then the string is 5.5" long, and so on for all strings in the the graph. The strings' ends are then tied to little rings that are very very small, with one ring for each vertex. Now the problem is "how can I get from ring A to ring B while traversing the shortest amount of rope?" What Dijkstra saw to do was to pick up ring A, and slowly drag it off the ground until it dragged up its neighbors, which dragged up their neighbors, and so on until ring B was just barely off the ground. Now you should travel from A to B on all of the taut strings, and the amount of string used to do that is exactly the least amount of rope it takes to go from A to B, which is exactly the cheapest way to get from point A to point B. The total cost, if the rings are really small and B is just barely off the ground, will then be equal to the height of A!

So the next time you are faced with a problem like this, try to imagine making a model, and then see what happens! You might end up inventing something that gets taught to every single computer science undergraduate in the country and enables us to find directions on websites. With the right visualization techniques, the sky is the limit!