Untitled

 avatar
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...