Does "standard" Dijkstra's algorithm work with bi-directional edges and zero cost edges?

I have been reading about Dijkstra's algorithm and I think I understand it. I followed the algorithm in pseudo-code from Wikipedia, and now I wonder:

1. If my graph is bi-directional and I add each edge to my graph twice (once "forwards", once "backwards"), will the "standard" Dijkstra's algorithm work?

2. Is it ok that some of my edges are zero cost? (the rest are all positive - none are negative)

And finally, what is a Dijkstra "heap" algorithm? Is it the same as Dijkstra's algorithm using a PriorityQueue?

• I was wondering because I read a description of Dijkstra's referring to "non-negative costs" and I didnt know if this meant "non-zero" also. Feb 4, 2014 at 9:10
• By "path", I assume you mean "edge"? (A path is a sequence of edges.) "Non-negative" means exactly what it says, bearing in mind that zero is neither positive nor negative. Dijkstra works equally for directed and undirected graphs, so bidirectional edges are not a problem. Feb 4, 2014 at 9:30