Graphs are used for modeling relations between entities. Be it connecting cities with streets and highways or representing friendships between groups of people. Graphs are a powerful abstraction that removes the details and lets us focus on the algorithmic problems. We are about to study algorithms that could be applied on any dataset that could be modeled as a graph.