In this chapter we have looked at the graph abstract data type, and some implementations of a graph. A graph enables us to solve many problems provided we can transform the original problem into something that can be represented by a graph. In particular, we have seen that graphs are useful to solve problems in the following general areas.
- Breadth first search for finding the unweighted shortest path.
- Dijkstra’s algorithm for weighted shortest path.
- Depth first search for graph exploration.
- Strongly connected components for simplifying a graph.
- Topological sort for ordering tasks.
- Minimum weight spanning trees for broadcasting messages.