# Introduction To

Graph Data Structure

A Graph is a non-linear data structure consisting of nodes and edges. The nodes are sometimes also referred to as vertices and the edges are lines or arcs that connect any two nodes in the graph.

Graphs are used to solve many real-life problems. Graphs are used to represent networks. The networks may include paths in a city or telephone network or circuit network. Graphs are also used in social networks like linkedIn, Facebook. For example, in Facebook, each person is represented with a vertex(or node). Each node is a structure and contains information like person id, name, gender, locale etc.

# Course Structure

## Introduction, DFS and BFS

- Graph and its representations
- Depth First Search or DFS for a Graph
- Applications of Depth First Search
- Applications of Breadth First Traversal
- Graph representations using set and hash
- Find a Mother Vertex in a Graph
- Transitive Closure of a Graph using DFS
- Find k-cores of an undirected graph
- Count the number of nodes at given level in a tree using BFS.
- Count all possible paths between two vertices
- Minimum initial vertices to traverse whole matrix with given conditions
- Shortest path to reach one prime to other by changing single digit at a time
- Water Jug problem using BFS
- Count number of trees in a forest
- BFS using vectors & queue as per the algorithm of CLRS
- Level of Each node in a Tree from source node (using BFS)
- Construct binary palindrome by repeated appending and trimming
- Transpose graph
- Path in a Rectangle with Circles
- Height of a generic tree from parent array
- BFS using STL for competitive coding
- Maximum number of edges to be added to a tree so that it stays a Bipartite graph
- A Peterson Graph Problem
- Implementation of Graph in JavaScript
- Print all paths from a given source to a destination using BFS
- Minimum number of edges between two vertices of a Graph
- Count nodes within K-distance from all nodes in a set
- Bidirectional Search
- Minimum edge reversals to make a root
- BFS for Disconnected Graph
- Move weighting scale alternate under given constraints
- Best First Search (Informed Search)
- Number of pair of positions in matrix which are not accessible
- Maximum product of two non-intersecting paths in a tree
- Delete Edge to minimize subtree sum difference
- Find the minimum number of moves needed to move from one cell of matrix to another
- Minimum steps to reach target by a Knight | Set 1
- Minimum number of operation required to convert number x into y
- Minimum steps to reach end of array under constraints
- Find the smallest binary digit multiple of given number
- Roots of a tree which give minimum height
- Stepping Numbers
- Clone an Undirected Graph
- Sum of the minimum elements in all connected components of an undirected graph
- Check if two nodes are on same path in a tree
- A matrix probability question
- Find length of the largest region in Boolean Matrix
- Iterative Deepening Search(IDS) or Iterative Deepening Depth First Search(IDDFS)

## n-ary Trees and LCA

## Graph Cycle

- Detect Cycle in a Directed Graph
- Detect cycle in an undirected graph
- Detect Cycle in a directed graph using colors
- Assign directions to edges so that the directed graph remains acyclic
- Detect a negative cycle in a Graph | (Bellman Ford)
- Cycles of length n in an undirected and connected graph
- Detecting negative cycle using Floyd Warshall
- Check if there is a cycle with odd weight sum in an undirected graph
- Check if a graphs has a cycle of odd length
- Clone a Directed Acyclic Graph
- Check loop in array according to given constraints
- Disjoint Set (Or Union-Find) | Set 1 (Detect Cycle in an Undirected Graph)
- Union-Find Algorithm | Set 2 (Union By Rank and Path Compression)
- Union-Find Algorithm | (Union By Rank and Find by Optimized Path Compression)
- Magical Indices in an array

## Topological Sorting

- Topological Sorting
- All Topological Sorts of a Directed Acyclic Graph
- Kahn’s algorithm for Topological Sorting
- Maximum edges that can be added to DAG so that is remains DAG
- Longest path between any pair of vertices
- Longest Path in a Directed Acyclic Graph
- Longest Path in a Directed Acyclic Graph | Set 2
- Topological Sort of a graph using departure time of vertex
- Given a sorted dictionary of an alien language, find order of characters

## Minimum Spanning Tree

- Prim’s Minimum Spanning Tree (MST) | Greedy Algo-5
- Applications of Minimum Spanning Tree Problem
- Prim’s MST for Adjacency List Representation | Greedy Algo-6
- Kruskal’s Minimum Spanning Tree Algorithm | Greedy Algo-2
- Boruvka’s algorithm | Greedy Algo-9
- Minimum cost to connect all cities
- Steiner Tree Problem
- Reverse Delete Algorithm for Minimum Spanning Tree
- Total number of Spanning Trees in a Graph
- Minimum Product Spanning Tree

## BackTracking

## Shortest Paths

- Dijkstra’s shortest path algorithm | Greedy Algo-7
- Dijkstra’s Algorithm for Adjacency List Representation | Greedy Algo-8
- Bellman–Ford Algorithm | DP-23
- Floyd Warshall Algorithm | DP-16
- Johnson’s algorithm for All-pairs shortest paths
- Shortest Path in Directed Acyclic Graph
- Shortest path with exactly k edges in a directed and weighted graph
- Dial’s Algorithm (Optimized Dijkstra for small range weights)
- Printing Paths in Dijkstra’s Shortest Path Algorithm
- Shortest Path in a weighted Graph where weight of an edge is 1 or 2
- Multistage Graph (Shortest Path)
- Shortest path in an unweighted graph
- Minimize the number of weakly connected nodes
- Betweenness Centrality (Centrality Measure)
- Comparison of Dijkstra’s and Floyd–Warshall algorithms
- Karp’s minimum mean (or average) weight cycle algorithm
- 0-1 BFS (Shortest Path in a Binary Weight Graph)
- Find minimum weight cycle in an undirected graph
- Minimum Cost Path with Left, Right, Bottom and Up moves allowed
- Minimum edges to reverse to make path from a source to a destination
- Find Shortest distance from a guard in a Bank

## Connectivity

- Find if there is a path between two vertices in a directed graph
- Articulation Points (or Cut Vertices) in a Graph
- Biconnected Components
- Biconnected graph
- Bridges in a graph
- Eulerian path and circuit for undirected graph
- Fleury’s Algorithm for printing Eulerian Path or Circuit
- Strongly Connected Components
- Transitive closure of a graph
- Count all possible walks from a source to a destination with exactly k edges
- Euler Circuit in a Directed Graph
- Count the number of non-reachable nodes
- Find the Degree of a Particular vertex in a Graph
- Check if a given graph is tree or not
- Minimum edges required to add to make Euler Circuit
- Eulerian Path in undirected graph
- Find if there is a path of more than k length from a source
- Word Ladder (Length of shortest chain to reach a target word)
- Print all paths from a given source to a destination
- Find the minimum cost to reach destination using a train
- Find if an array of strings can be chained to form a circle | Set 1
- Find if an array of strings can be chained to form a circle | Set 2
- Tarjan’s Algorithm to find Strongly Connected Components
- Number of loops of size k starting from a specific node
- Paths to travel each nodes using each edge (Seven Bridges of Königsberg)
- Number of cyclic elements in an array where we can jump according to value
- Number of groups formed in a graph of friends
- Minimum cost to connect weighted nodes represented as array
- Count single node isolated sub-graphs in a disconnected graph
- Calculate number of nodes between two vertices in an acyclic Graph by Disjoint Union method
- Dynamic Connectivity | Set 1 (Incremental)
- Check if a graph is strongly connected | Set 1 (Kosaraju using DFS)
- Check if a given directed graph is strongly connected | Set 2 (Kosaraju using BFS)
- Check if removing a given edge disconnects a graph
- Find all reachable nodes from every node present in a given set
- Connected Components in an undirected graph
- k’th heaviest adjacent node in a graph where each vertex has weight

## Maximum Flow

- Ford-Fulkerson Algorithm for Maximum Flow Problem
- Find maximum number of edge disjoint paths between two vertices
- Find minimum s-t cut in a flow network
- Maximum Bipartite Matching
- Channel Assignment Problem
- Push Relabel Algorithm | Set 1 (Introduction and Illustration)
- Push Relabel Algorithm | Set 2 (Implementation)
- Karger’s algorithm for Minimum Cut | Set 1 (Introduction and Implementation)
- Karger’s algorithm for Minimum Cut | Set 2 (Analysis and Applications)
- Dinic’s algorithm for Maximum Flow
- Max Flow Problem Introduction

## STL Implementation of Algorithms

## Hard Problems

- Graph Coloring | Set 1 (Introduction and Applications)
- Graph Coloring | Set 2 (Greedy Algorithm)
- Traveling Salesman Problem (TSP) Implementation
- Travelling Salesman Problem | Set 1 (Naive and Dynamic Programming)
- Travelling Salesman Problem | Set 2 (Approximate using MST)
- Vertex Cover Problem | Set 1 (Introduction and Approximate Algorithm)
- K Centers Problem | Set 1 (Greedy Approximate Algorithm)
- Erdos Renyl Model (for generating Random Graphs)
- Clustering Coefficient in Graph Theory
- Chinese Postman or Route Inspection | Set 1 (introduction)
- Hierholzer’s Algorithm for directed graph

## Misc

- Number of Triangles in an Undirected Graph
- Number of Triangles in Directed and Undirected Graphs
- Check whether a given graph is Bipartite or not
- Snake and Ladder Problem
- Minimize Cash Flow among a given set of friends who have borrowed money from each other
- Boggle (Find all possible words in a board of characters) | Set 1
- Hopcroft–Karp Algorithm for Maximum Matching | Set 1 (Introduction)
- Hopcroft–Karp Algorithm for Maximum Matching | Set 2 (Implementation)
- Find same contacts in a list of contacts
- Hypercube Graph
- Check for star graph
- Optimal read list for given number of days
- Print all Jumping Numbers smaller than or equal to a given value
- Fibonacci Cube Graph
- Barabasi Albert Graph (for Scale Free Models)
- Construct a graph from given degrees of all vertices
- Degree Centrality (Centrality Measure)
- Katz Centrality (Centrality Measure)
- Mathematics | Graph theory practice questions
- 2-Satisfiability (2-SAT) Problem
- Determine whether a universal sink exists in a directed graph
- Number of sink nodes in a graph
- Largest subset of Graph vertices with edges of 2 or more colors
- NetworkX : Python software package for study of complex networks
- Generate a graph using Dictionary in Python
- Count number of edges in an undirected graph
- Two Clique Problem (Check if Graph can be divided in two Cliques)
- Check whether given degrees of vertices represent a Graph or Tree
- Finding minimum vertex cover size of a graph using binary search
- Stable Marriage Problem
- Sum of dependencies in a graph