Algebraic graph theory is a combination of two strands. The first is the study of algebraic objects associated with graphs. The second is the use of tools from algebra to derive properties of graphs. The authors' goal has been to present and illustrate the main tools and ideas of algebraic graph theory, with an emphasis on current rather than classical topics. While placing a strong emphasis on concrete examples, the authors tried to keep the treatment self-contained.