Graph theory is well-known as a rich source of concepts and algorithms applicable to many different disciplines. This book gives an excellent exposition of graphs, graph algorithms and their applications. It builds the theory from the very basics, so it is easy to understand for people not yet skilled in discrete mathematics, but at the same time it gives deep insight into the topics discussed, which is a virtue rarely seen in books on applications. The first few chapters cover the standard material: graph connectivity, traversals, colourings, flows and graph drawing. The subsequent chapters follow up by explaining several advanced topics like Ramsey theory, extremal graph theory and combinatorial enumeration. The theory is well spiced with examples, figures, algorithms and notes on their implementation. Except for the very beginning, the chapters are independent of each other and each of them is accompanied by a glossary of terms, making the work not only a good textbook but also a handy reference.