#### Overview of this book

C++ is a mature multi-paradigm programming language that enables you to write high-level code with a high degree of control over the hardware. Today, significant parts of software infrastructure, including databases, browsers, multimedia frameworks, and GUI toolkits, are written in C++. This book starts by introducing C++ data structures and how to store data using linked lists, arrays, stacks, and queues. In later chapters, the book explains the basic algorithm design paradigms, such as the greedy approach and the divide-and-conquer approach, which are used to solve a large variety of computational problems. Finally, you will learn the advanced technique of dynamic programming to develop optimized implementations of several algorithms discussed in the book. By the end of this book, you will have learned how to implement standard data structures and algorithms in efficient and scalable C++ 14 code.
Free Chapter
1. Lists, Stacks, and Queues
2. Trees, Heaps, and Graphs
3. Hash Tables and Bloom Filters
4. Divide and Conquer
5. Greedy Algorithms
6. Graph Algorithms I
7. Graph Algorithms II
8. Dynamic Programming I
9. Dynamic Programming II

## Prim's MST Algorithm

The MST problem was introduced in Chapter 5, Greedy Algorithms, and is defined as follows:

"Given a graph, G = < V, E >, where V is the set of vertices and E is the set of edges, each associated with an edge weight, find a tree, T, that spans all vertices in V and has the minimum total weight."

In Chapter 5, Greedy Algorithm, we discussed the practical applications of the MST problem and Kruskal's algorithm, which finds an MST in a given graph. Kruskal's algorithm adds all the edges of the graph to a min-heap and greedily adds minimum-cost edges to MST, checking that no cycles are formed in the tree on each addition.

The idea behind Prim's algorithm (also known as Jarvik's algorithm) is similar to that of BFS. The algorithm starts by adding the starting vertex to a frontier, which consists of the set of previously visited vertices and then iteratively explores the vertices adjacent to the current frontier. However, while choosing...