In graph theory, the **shortest path problem** is the following: Given a weighted graph, (that is a set *N* of nodes, a set *E* of edges and a real-valued function f : *E* `->` **R**), and given further two elements *n, n'* of *N*, find a path *P* from *n* to *n'*, so that

A solution to the shortest path problem is sometimes called a "pathing algorithm". The most important algorithm for solving this problem in case all edge weights are greater than or equal to zero is Dijkstra's algorithm. Without worsening the run time, this algorithm can in fact compute the shortest paths from a given start point *s* to *all other* nodes. Another algorithm is the A* algorithm (or A* pathing algorithm.)

A related problem is the traveling salesman problem, which is the problem of finding the shortest path that goes through every node exactly once, and returns to the start. That problem is NP-hard, so there is no known way to solve it in polynomial time.