• 最小生成树基础算法(更新中~)


    Kruskal算法

     

     1 //
     2 //  main.cpp
     3 //
     4 //  Created by Soildom on 2017/10/31.
     5 //  Copyright © 2017年 Soildom. All rights reserved.
     6 //
     7 
     8 #include <iostream>
     9 using namespace std;
    10 
    11 int V,E;
    12 class edge {
    13 public:
    14     int weight,from,to;
    15     bool flag=false;
    16 };
    17 
    18 int cmp(const void *p1,const void *p2) {
    19     return ((class edge*)p1)->weight-((class edge*)p2)->weight;
    20 }
    21 
    22 int union_find(int *v,int x) {
    23     return (v[x]==x)?x:(v[x]=union_find(v, v[x]));
    24 }
    25 
    26 void MST(edge *e,int *v) {
    27     int vnum=0,all_weight=0,x,y;
    28     for (int i=0; i<E&&vnum<V-1; i++) {
    29         x=union_find(v, e[i].from);
    30         y=union_find(v, e[i].to);
    31         if (x!=y) {
    32             v[x]=y;
    33             e[i].flag=true;
    34             all_weight+=e[i].weight;
    35             vnum++;
    36         }
    37     }
    38     cout<<all_weight<<endl;
    39 }
    40 
    41 int main() {
    42     char c1,c2;
    43     cin>>V>>E;
    44     edge *e=new edge[E];
    45     int *v=new int[V];
    46     for (int i=0; i<V; i++)
    47         v[i]=i;
    48     for (int i=0; i<E; i++) {
    49         cin>>c1>>c2>>e[i].weight;
    50         e[i].from=c1-'a';
    51         e[i].to=c2-'a';
    52     }
    53     qsort(e, E, sizeof(edge), cmp);
    54     MST(e, v);
    55     delete [] e;
    56     delete [] v;
    57 }
  • 相关阅读:
    算法——基础
    递归函数
    docker常用命令
    vue——计算属性和侦听器
    vue——指令系统
    vue——介绍和使用
    webpack、babel模块、模块化
    Nodejs介绍及npm工具使用
    ECMAScript 6简介
    easyui(入门)
  • 原文地址:https://www.cnblogs.com/soildom/p/7887068.html
Copyright © 2020-2023  润新知