Dijkstra's algorithm in plain English
Dijkstra's finds the cheapest path from one start vertex to every other vertex, as long as no edge weight is negative.
The plain-English version:
1. Everyone starts infinitely far away, except the start, at distance 0.
2. Repeatedly pick the unvisited vertex with the smallest known distance. That distance is now final.
3. For each neighbor, ask: "Is going through this vertex cheaper than what I knew before?" If so, update it.
A priority queue does the "pick the smallest" step efficiently.
Why no negative edges? Step 2 assumes nothing found later can make a finalized vertex cheaper. A negative edge could, and then the algorithm's promise breaks.
Comments
For negative edges, look into Bellman-Ford. Slower, but it handles them.
The explanation of why negative edges break it is the clearest I've read.