added prims algorithm

pull/817/head
rathi310 2022-08-25 10:57:12 +05:30
parent 8649eda4b1
commit b6d86e4e85
1 changed files with 59 additions and 0 deletions

View File

@ -0,0 +1,59 @@
#include <bits/stdc++.h>
using namespace std;
void prims(vector<pair<int,int>> adj[], vector<int> &key, vector<int> &parent, vector<bool> &mst, int V, int E, int &ans)
{
key[0] = 0;
for(int count=0; count<V; count++)
{
int min = INT_MAX, u;
//to find the minimum weight of edge from the key array
for(int i=0;i<V;i++){
if(!mst[i] && key[i] < min){
min = key[i];
u = i;
}
}
mst[u] = true;
ans += key[u];
for(auto it: adj[u]){
int v = it.first;
int w = it.second;
if(!mst[v] && w < key[v]){
key[v] = w;
parent[v] = u;
}
}
}
}
int main(){
int V,E;
cout<<"no of vertex:"; cin>>V;
cout<<"no of edges:"; cin>>E;
vector<pair<int,int>> adj[V];
int u,v,wt;
for(int i=0; i<E; i++){
cin>> u >> v >> wt;
adj[u].push_back({v,wt});
adj[v].push_back({u,wt});
}
vector<int> key(V,INT_MAX);
vector<int> parent(V,-1);
vector<bool> mst(V,false);
int ans=0;
prims(adj,key,parent,mst,V,E,ans);
cout<<ans<<endl;
for(int i=1; i<V; i++){
cout<<parent[i] << "-" << i << endl;
}
return 0;
}