Graphs are possibly the most powerful data structure in mathematics and computer science. Moreover, graphs are found in curious places. First, a graph is defined by a set of things (vertices) and a set of relations (edges) between them. There are undirected graphs, like the social network on Facebook, where the edges are bidirectional, e.g., A and B are friends. There are also directed graphs (digraphs), such as a flow chart, where relations have a direction, i.e., A to B is different than B to A.