zoukankan      html  css  js  c++  java
  • 最小生成树 prim算法

    n表示点的个数,m表示边的条数,在依次输入边的起点终点与权值,输出总花费。

    可用优先队列优化,需要的话请留言。

    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    bool book[100];
    const int inf = 2100000000;
    int main()
    {
        vector<int>u[100];
        vector<int>w[100];
    
        int n,m;
        cin>>n>>m;
        int x,y,s;
        for(int i=0;i<m;i++){
            cin>>x>>y>>s;
            u[y].push_back(x);
            u[x].push_back(y);
            w[x].push_back(s);
            w[y].push_back(s);
        }
    
        int dis[100];
        fill(dis,dis+99,inf);
    
        int num=0;
        dis[1]=0;
        int minn=inf;
        int t,ans=0;
        while(num!=n){
            minn=inf;
            for(int i=1;i<=n;i++){
                if(dis[i]<minn&&!book[i]){minn=dis[i];t=i;}
            }
            ans+=dis[t];num++;book[t]=true;
            for(int i=0;i<u[t].size();i++){
                if(w[t][i]<dis[u[t][i]]){
                    dis[u[t][i]]=w[t][i];
                }
            }
        }
        cout<<ans<<endl;
    }
  • 相关阅读:
    SCRUM站立会议
    燃尽图
    第一次作业----词频统计
    构建之法读感
    final 评论 II
    final 评论 I
    第十一周PSP
    学期回顾
    第十周PSP
    Gradle学习笔记
  • 原文地址:https://www.cnblogs.com/ZGQblogs/p/9076269.html
Copyright © 2011-2022 走看看