mirror of
https://github.com/TheAlgorithms/C-Plus-Plus.git
synced 2026-02-12 06:56:59 +08:00
Create Prim.cpp (#750)
* Create Prim.cpp Created file for Prim's Algorithm in graph that was still missing. * Update Prim.cpp Edited indentation part * Update Prim.cpp indentation updated * Update Prim.cpp Indentation updated * Rename Prim.cpp to prim.cpp Co-authored-by: Christian Clauss <cclauss@me.com>
This commit is contained in:
58
graph/prim.cpp
Normal file
58
graph/prim.cpp
Normal file
@@ -0,0 +1,58 @@
|
||||
// C++ program to implement Prim's Algorithm
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <queue>
|
||||
|
||||
const int MAX = 1e4 + 5;
|
||||
typedef std:: pair<int, int> PII;
|
||||
|
||||
bool marked[MAX];
|
||||
std:: vector <PII> adj[MAX];
|
||||
|
||||
int prim(int x) {
|
||||
// priority queue to maintain edges with respect to weights
|
||||
std:: priority_queue<PII, std:: vector<PII>, std:: greater<PII> > Q;
|
||||
int y;
|
||||
int minimumCost = 0;
|
||||
PII p;
|
||||
|
||||
Q.push(std:: make_pair(0, x));
|
||||
while (!Q.empty()) {
|
||||
// Select the edge with minimum weight
|
||||
p = Q.top();
|
||||
Q.pop();
|
||||
x = p.second;
|
||||
// Checking for cycle
|
||||
if (marked[x] == true)
|
||||
continue;
|
||||
minimumCost += p.first;
|
||||
marked[x] = true;
|
||||
for (int i = 0; i < adj[x].size(); ++i) {
|
||||
y = adj[x][i].second;
|
||||
if (marked[y] == false)
|
||||
Q.push(adj[x][i]);
|
||||
}
|
||||
}
|
||||
return minimumCost;
|
||||
}
|
||||
|
||||
int main() {
|
||||
int nodes, edges, x, y;
|
||||
int weight, minimumCost;
|
||||
|
||||
std:: cin >> nodes >> edges; // number of nodes & edges in graph
|
||||
if (nodes == 0 || edges == 0)
|
||||
return 0;
|
||||
|
||||
// Edges with their nodes & weight
|
||||
for (int i = 0; i < edges; ++i) {
|
||||
std::cin >> x >> y >> weight;
|
||||
adj[x].push_back(std:: make_pair(weight, y));
|
||||
adj[y].push_back(std:: make_pair(weight, x));
|
||||
}
|
||||
|
||||
// Selecting 1 as the starting node
|
||||
minimumCost = prim(1);
|
||||
std:: cout << minimumCost << std:: endl;
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user