zoukankan      html  css  js  c++  java
  • 最小生成树(求村落之间最小修哪几条路能使耗资最小)

    大佬的博客

    http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<set>
    #include<algorithm>
    #include<map>
    #define maxn 200005
    #define inf 1e8
    using namespace std;
    //普里姆算法    o(n*n)    也可以用优先队列存储   o(n*logn)
    int cost[1000][1000];//记录两点间的权值
    int mincost[10000];//从集合x出发到每个顶点的最小权值
    bool used[100000];//顶点是否在集合中
    int v;//顶点数
    int prim()
    {
        for(int i=0;i<v;i++)//初始化mincost和used
        {
            mincost[i]=inf;
            used[i]=false;
        }
        mincost[0]=0;
        int res=0;//求和
        while(true||1)
        {
            int s=-1;
            for(int u=0;u<v;u++)
            {
                if(!used[u]&&(s==-1||mincost[u]<mincost[s]))s=u;//第一个存的是第一个点,在这里是顶点0
            }
            if(s==-1)break;//代表已经找不到能加入集合x的点了
            used[s]=true;//把s放入集合x中
            res+=mincost[s];
            for(int u=0;u<v;u++)
            {
                mincost[u]=min(mincost[u],cost[s][u]);//把图看懂就ok
            }
        }
        return res;
    }
    
    //kruskal算法    o(n*logn)  算了贴博客吧,,主要因为这个算法made还要用并查集,我特么懒得找并查集板子套了
    struct edge{
     int u,v,cost;
    };
    bool comp(const edge&)
  • 相关阅读:
    linux开关机命令
    实现vmare虚拟机系统随主机开机自动启动
    linux常用命令
    centos7.3上用源代码安装zabbix3.2.7
    centos7用yum搭建LAMP环境
    centos7永久更改主机名
    Python基础学习-列表的常用方法
    中兴交换机配置命令
    dml并行
    11.2.0.4 aix下运行第二个节点root.sh报错处理
  • 原文地址:https://www.cnblogs.com/huangzzz/p/8336661.html
Copyright © 2011-2022 走看看