Untitled
unknown
plain_text
2 years ago
1.6 kB
3
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...