This textbook introduces graph algorithms on an intuitive basis followed by a detailed exposition using structured pseudocode, with correctness proofs as well as worst-case analyses. Graph algorithms is a well-established subject in mathematics and computer science. Beyond classical application fields, like approximation, combinatorial optimization, graphics, and operations research, graph algorithms have recently attracted increased attention from computational biology, bioinformatics, and computational chemistry. Centered around the fundamental issue of graph isomorphism, this book goes beyond classical graph problems of shortest paths, spanning trees, flows in networks, and matchings in bipartite graphs. Advanced algorithmic results and techniques of practical relevance are presented in a coherent and consolidated way. Furthermore, Python code for all algorithms presented is given in a appendix. Numerous illustrations, examples, problems, exercises, and a comprehensive bibliography support students and professionals in using the book as a text and source of reference.