This tutorial is the second of three volumes that are intended to survey the most important computer algorithms in use today. The first volume (Parts 1–4) covers fundamental concepts (Part 1), data structures (Part 2), sorting algorithms (Part 3), and searching algorithms (Part 4); this volume (Part 5) covers graphs and graph algorithms; and the (yet to be published) third volume (Parts 6–8) covers strings (Part 6), computational geometry (Part 7), and advanced algorithms and apps (Part 8). The tutorials are useful as texts early in the computer science curriculum, after students have acquired basic coding skills and familiarity with computer systems, but before they have taken specialized courses in advanced areas of computer science or computer apps. The tutorials also are useful for self-study or as a reference for people engaged in the development of computer systems or apps programs because they contain implementations of useful algorithms and detailed information on these algorithms' performance characteristics. The broad perspective taken makes the series an appropriate introduction to the field. Together the three volumes comprise the Third version of a tutorial that has been widely used by students and programmers around the world for many years. I have completely rewritten the text for this version, and I have added thousands of new exercises, hundreds of new figures, dozens of new programs, and detailed commentary on all the figures and programs. This new material provides both coverage of new topics and fuller explanations of many of the classic algorithms. A new emphasis on abstract data types throughout the tutorials makes the programs more broadly useful and relevant in modern object-oriented coding environments. People who have read previous versions will find a wealth of new information throughout; all readers will find a wealth of pedagogical material that provides effective access to essential concepts. These tutorials are not just for programmers and computer science students. Everyone who uses a computer wants it to run faster or to solve larger problems. The algorithms that we consider represent a body of knowledge developed during the last 50 years that is the basis for the efficient use of the computer for a broad variety of apps. From N-body simulation problems in physics to genetic-sequencing problems in molecular biology, the basic methods described here have become essential in scientific research; and from database systems to Internet search engines, they have become essential parts of modern software systems. As the scope of computer apps becomes more widespread, so grows the impact of basic algorithms. The goal of this tutorial is to serve as a resource so that students and professionals can know and make intelligent use of graph algorithms as the need arises in whatever computer app they might undertake.