When comparing Dijkstra's Algorithm vs A* Algorithm, the Slant community recommends A* Algorithm for most people. In the question“What are the best 2D pathfinding algorithms?” A* Algorithm is ranked 1st while Dijkstra's Algorithm is ranked 2nd. The most important reason people chose A* Algorithm is:
A* can be morphed into another path-finding algorithm by simply playing with the heuristics it uses and how it evaluates each node. This can be done to simulate Dijkstra, Best First Search, Breadth First Search and Depth First Search.
Ranked in these QuestionsQuestion Ranking
Pros
Pro Uninformed algorithm
Dijkstra is an uninformed algorithm. This means that it does not need to know the target node beforehand. For this reason it's optimal in cases where you don't have any prior knowledge of the graph when you cannot estimate the distance between each node and the target.
Pro Good when you have multiple target nodes
Since Dijkstra picks edges with the smallest cost at each step it usually covers a large area of the graph. This is especially useful when you have multiple target nodes but you don't know which one is the closest.
Pro Can be morphed into other algorithms
A* can be morphed into another path-finding algorithm by simply playing with the heuristics it uses and how it evaluates each node. This can be done to simulate Dijkstra, Best First Search, Breadth First Search and Depth First Search.
Pro Complete
A* is complete, which means that it will always find a solution if it exists.
Pro Heuristic
A* expands on a node only if it seems promising. It's only focus is to reach the goal node as quickly as possible from the current node, not to try and reach every other node.
Cons
Con Fails for negative edge weights
If we take for example 3 Nodes (A, B and C) where they form an undirected graph with edges: AB = 3, AC = 4, BC=-2, the optimal path from A to C costs 1 and the optimal path from A to B costs 2. If we apply Dijkstra's algorithm: starting from A it will first examine B because it is the closest node. and will assign a cost of 3 to it and therefore mark it closed which means that its cost will never be reevaluated. This means that Dijkstra's cannot evaluate negative edge weights.
Con Not useful if you have many target nodes
If you have many target nodes and you don't know which one is closest to the main one, A* is not very optimal. This is because it needs to be run several times (once per target node) in order to get to all of them.