Graphs are mathematical structures consisting of vertices (nodes) connected by edges (links). They can be directed or undirected, weighted or unweighted, and may contain cycles or be acyclic. Common representations include adjacency lists for sparse graphs and adjacency matrices for dense graphs, each offering trade‑offs in space and lookup time. Core algorithms explore graph topology: breadth‑first search (BFS) discovers shortest‑path distances in unweighted graphs, while depth‑first search (DFS) enables topological sorting, strongly connected component detection, and cycle identification. Weighted shortest‑path problems are solved by Dijkstra’s algorithm for non‑negative edges, Bellman‑Ford for graphs with negative edges, and Floyd‑Warshall for all‑pairs distances. Minimum spanning trees, which connect all vertices with minimal total weight, are constructed by Kruskal’s greedy edge‑sorting approach using a disjoint‑set structure or by Prim’s algorithm using a priority queue. Advanced topics include network flow, graph coloring, and planarity testing, each leveraging these foundational concepts to solve complex computational problems efficiently.