# 3.9 Review

The following are the main points you should have learned from this chapter:

• Many problems can be abstracted to the problem of finding paths in graphs.

• Breadth-first and depth-first searches can find paths in graphs without any extra knowledge beyond the graph.

• $A^{*}$ search can use a heuristic function that estimates the cost from a node to a goal. If graph is not pathological (see Proposition 3.2) and the heuristic is admissible, $A^{*}$ is guaranteed to find a lowest-cost path to a goal if one exists.

• Multiple-path pruning and cycle pruning can be used to make search more efficient.

• Iterative deepening and depth-first branch-and-bound searches can be used to find lowest-cost paths with less memory than methods, such as $A^{*}$, which store multiple paths.

• When graphs are small enough to store the nodes, dynamic programming records the actual cost of a lowest-cost path from each node to the goal, which can be used to find the next arc in an optimal path.