## Chapter 10. Graph Algorithms

A graph is a computation object that is used to model relationships among things. For example, constituent atoms within a molecule, components within an electrical circuit, and nodes in a communication network are all things that you can represent and manipulate as graphs. Trees are graphs with special properties, so you could represent a hierarchical chart or family tree as a graph. There is a lot of terminology involved with graph theory. The next few paragraphs give a quick overview of the basic terminology needed to study concurrent algorithms to compute with graphs. If you’re already familiar with graph theory terms, feel free to skip ahead a bit. Of course, if you’ve made it this far through the book, what’s another page and a half between reader and author?

A graph is made up of two finite sets: a set of
*nodes* (or *vertices*) and a set of
*edges*. Each node has a label to identify it and
distinguish it from other nodes. Edges in a graph connect exactly two nodes
and are denoted by the labels of the pair of nodes that are related. If you
have a graph of three nodes—*A*, *B*,
and *C*—the two edges connecting *A*
with *B* and *B* with
*C* would be written as
(*A*,*B*) and
(*B*,*C*).

A graph is *directed* if all edge pairs are
ordered. Directed edges represent a one-way relationship from one node to
another. If the node pairs are unordered, the graph is
*undirected*. A directed graph ...

Get *The Art of Concurrency* now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.