This course introduces the student to the techniques, algorithms, and structures used in graph theory and network flows in order to solve real world discrete optimization problems. Basic definitions relating to graphs and digraphs, together with a large number of examples and applications are provided. Cadets learn to implement new graph theory techniques in their area of study. Emphasis is on modeling, algorithms, and optimization.