Untitled
unknown
plain_text
2 years ago
1.6 kB
6
Indexable
#include<list>
#include<unordered_map>
#include<iostream>
#include<climits>
vector<pair<pair<int, int>, int>> calculatePrimsMST(int n, int m, vector<pair<pair<int, int>, int>> &g)//(n1,n2,weight)
{
//adjlist making
unordered_map <int ,list<pair<int,int>>> adj;
for(int i=0;i<m;i++){
int x=g[i].first.first;
int y=g[i].first.second;
int w=g[i].second;
adj[x].push_back(make_pair(y,w));
adj[y].push_back(make_pair(x,w));
}
//3 ds ..indicating nodes with index
vector<int> key(n+1,INT_MAX);
vector<bool> mst(n+1,false);
vector<int> parent(n+1,-1);
parent[1]=-1;
key[1]=0;
for(int i=1;i<n;i++){
int u;
int mini=INT_MAX;
//find mini
for(int j=1;j<=n;j++){
if(mst[j]==false && key[j]<mini){
u=j;
mini =key[j];
}
}
mst[u]=true;
//check nbr of mini
for(auto nbr:adj[u]){
int y=nbr.first;
int w=nbr.second;
if(mst[y]==false && w<key[y]){
parent[y]=u;
key[y]=w;
}
}
}
vector<pair<pair<int, int>, int>> result;
for (int i=2;i<=n;i++){
int par=parent[i];
result.push_back(make_pair(make_pair(par,i),key[i]));
}
return result;
}
Editor is loading...