最小生成树:Prim,kruskal

prim:以点为衡量

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

//prim
int main(){
    int v,e;
    cin>>v>>e;
    vector<vector<int>>graph(v+1,vector<int>(v+1,10001));

    while(e--){
        int v1,v2,val;
        cin>>v1>>v2>>val;
        graph[v1][v2]=val;
        graph[v2][v1]=val;
    }

    vector<int>minDist(v+1,10001);
    vector<bool>inTree(v+1,false);
    
    for(int i=0;i<v;i++){//只需要n-1次
    int cur=-1;
    int minval=INT_MAX; //在里面,每次都从max开始

    for(int j=1;j<=v;j++){
    if(!inTree[j]&&minval>minDist[j]){
        cur=j;
        minval=minDist[j];
    }//选出最小的一个
    }

    inTree[cur]=1;

    for(int k=1;k<=v;k++){
        if(!inTree[k]&&minDist[k]>graph[k][cur]){
            minDist[k]=graph[k][cur];
        }
    }

    }
    int res=0;
    for(int i=2;i<=v;i++){
        res+=minDist[i];
    }
    cout<<res<<endl;

}

kruskal:维护边的集合

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

struct Edges{
    int l,r,val;
};

vector<int>father(10001,0);

void init(){
    for(int i=1;i<10001;i++)father[i]=i;
}

int find(int u){
    if(u==father[u])return u;
    else return father[u]=find(father[u]);
}

void join(int u,int v){
    u=find(u);
    v=find(v);
    if(u==v)return;
    father[v]=u;
}

bool issame(int u,int v){
    u=find(u);
    v=find(v);
    if(u==v)return true;
    else return false;
}

bool cmp(Edges& a,Edges& b){
    return a.val<b.val;
}

int main(){
    init();//怎么又忘了!!!!!!!!输出都是0!!!!!
    int v,e;
    cin>>v>>e;
    vector<Edges>edges;
    while(e--){
        int l,r,val;
        cin>>l>>r>>val;
        edges.push_back({l,r,val});
    }
    sort(edges.begin(),edges.end(),cmp);
    int res=0;
    for(Edges edg:edges){
        int v1=edg.l;
        int v2=edg.r;
        if(!issame(v1,v2)){
            res+=edg.val;
            join(v1,v2);
        }
    }
cout<<res<<endl;
}
相关推荐
H.莓飛18 分钟前
【数据结构】队列
linux·数据结构·centos
汉克老师23 分钟前
GESP2026年9月认证C++二级( 第一部分选择题(1~7题)精讲
c++·gesp·小学生·学c++编程
Ivanqhz25 分钟前
层归一化、残差、前馈网络与激活函数简述
服务器·数据库·人工智能·深度学习·算法
沫璃染墨1 小时前
《从零入门Linux系统篇(五十四):线程篇·七——互斥锁底层原理:从原子交换到线程竞争与锁实现》
linux·运维·服务器·开发语言·c++·驱动开发·系统架构
不会就选b1 小时前
算法日常・每日刷题--<动态规划>3
数据结构·算法
H.莓飛2 小时前
【数据结构】队列_OJ题
linux·数据结构·centos
-dzk-2 小时前
【堆】LC 347.前 K 个高频元素
算法·堆
H.莓飛2 小时前
【数据结构】栈_OJ题
linux·数据结构·算法·centos
Zootopia6262 小时前
多架 eVTOL集群排班调度方案思考
人工智能·算法·数学建模·matlab·动态规划·无人机·evtol
可乐ea2 小时前
GitHub Security Lab 开源 Fuzzing Taskflow:让 LLM 智能体自己跑完 C/C++ 模糊测试
jvm·c++·github·模糊测试·mcp·代码agent·智能体自动化