This book introduces graph algorithms on an intuitive basis followed by a detailed exposition in a literate programming style, with correctness proofs as well as worst-case analyses. Full C++ implementations of all algorithms presented are given using the LEDA library of efficient data structures and algorithms.