This document provides an overview of graph theory and some of its common algorithms. It discusses the history of graph theory and its applications in various fields like engineering. It defines basic graph terminology like nodes, edges, walks, paths and cycles. It also explains popular graph algorithms like Dijkstra's algorithm for finding shortest paths, Kruskal's and Prim's algorithms for finding minimum spanning trees, and graph partitioning algorithms. It provides pseudocode, examples and analysis of the time complexity for these algorithms.