最小生成树: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;
}
相关推荐
徐小夕6 小时前
花了3个月,我们做了一款 AI 版的“飞书文档”
前端·算法·github
Robert--cao6 小时前
移动底盘与机械臂联合规划:开源算法与工程实现
算法
小豆庄7 小时前
Mac 上给视频人脸打码:本地工具的依赖、追踪与推理管线
算法·视觉检测·视频·敏捷流程·纹理贴图
星夜离尘567 小时前
MATLAB 工程实验:从相邻块均值手写重叠 Allan 偏差,数清有效项
算法·matlab·均值算法
careathers8 小时前
【数据结构】从堆到 PriorityQueue:手写一个优先级队列
数据结构
y1su9 小时前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
residual_fan10 小时前
船用柴油机动态机动工况故障诊断:控制感知仿射网络(CAAN)的技术实现
人工智能·算法·数据挖掘·数据分析
syagain_zsx10 小时前
BRpc 二次封装:Channel 管理、服务管理与回调工厂
c++·学习·程序人生·rpc·谷歌
其实防守也摸鱼10 小时前
Cylab在线靶场——CTF中的通用技能
linux·数据库·学习·算法·靶场·ctf·学习网络安全
蓝悦无人机11 小时前
《Planning algorithms》读书笔记——第8章 反馈运动规划
算法·读书笔记·反馈运动规划