求解最小生成树——prime算法模板

来源:互联网 发布:手机锁屏病毒源码 编辑:程序博客网 时间:2024/05/21 18:47
const int maxn=1000;const int inf=1e9;//邻接矩阵版int G[maxn][maxn];int n,d[maxn];bool vis[maxn]={false};int prime(){    fill(d,d+maxn,inf);    d[0]=0;    int ans=0;    for(int i=0;i<n;i++){        int u=-1,mind=inf;        for(int j=0;j<n;j++) if(!vis[j]&&d[j]<mind){u=j;mind=d[j];}        if(u==-1) return -1;        vis[u]=true;        ans+=d[u];        for(int v=0;v<n;v++) if(!vis[v]&&G[u][v]!=inf&&G[u][v]<d[v]) d[v]=G[u][v];    }    return ans;}//邻接表版struct Node{    int v,dis;};vector<Node> Adj[maxn];int n,d[maxn];bool vis[maxn]={false};int prime(){    fill(d,d+maxn,inf);    d[0]=0;    int ans=0;    for(int i=0;i<n;i++){        int u=-1,mind=inf;        for(int j=0;j<n;j++) if(!vis[j]&&d[j]<mind){u=j;mind=d[j];}        if(u==-1) return -1;        vis[u]=true;        ans+=d[u];        for(int j=0;j<Adj[u].size();j++){            int v=Adj[u][j].v;            int dis=Adj[u][j].dis;            if(!vis[v]&&dis<d[v]) d[v]=dis;        }    }    return ans;}

原创粉丝点击