图论小结(最小生成树)

来源:互联网 发布:java安装时出现错误 编辑:程序博客网 时间:2024/06/05 07:44

最小生成树是指一个图,然后怎么能够让它连通起来并且所有的边的权重加起来最短,是一个全局的作用,要用到并查集,并查集是一个“分帮结派”的过程,重点是father数组、find函数和join函数,一个图,每两个点之间有一条线,则这两个点就是一家的,有共同的根节点,其中一个为另一个的father,在寻找的过程中,一个家族的点,father可能不一样,但是find(x)的值肯定是一样的,为根节点,当然这个是随机的。点为核心。
最小生成树是以边(edge)为核心,先建一个结构体,包括起点、终点和权重。录入的过程就是标记的过程,记录下来这个边的起点、终点、权重。
然后在加入并查集的过程中各个边是有优先级的,因为想要最小生成树,所以保证加入的边的权是可以选择的最小的,所以先来一个cmp排序,然后再从第一条边开始扫起。
第一条边肯定要加进去的,然后看第二小的,如果此条边的两个点在一个集合中,加进去就是回路了,如果不在,加进去刚好可以联通,所以kruskal算法的思路就出来了。

poj的highways是最基础的最小生成树的题,但是还是想放上我们自己oj的题~

#include<iostream>using namespace std;#include<algorithm>const int maxn = 105;int n;//n个城市int V, E;//V个点,E条边struct edge{    int u, v, cost;};edge eg[maxn*maxn];int father[maxn];void setfather(int n){    for (int i = 0; i < n; i++)        father[i] = i;}int find(int x){    while (father[x] != x)        x = father[x];    return x;}void join(int x, int y){    int fx = find(x);    int fy = find(y);    if (fx != fy)        father[fx] = fy;}bool cmp(const edge &a, const edge &b){    return a.cost < b.cost;}void kruskal(){    setfather(n);    sort(eg, eg + n*n,cmp);    int Max = -1;    int sum = 0;    for (int i = 0; i < E; i++)    {        edge e = eg[i];        if (find(e.u) != find(e.v))        {            join(e.u, e.v);            Max = max(Max, e.cost);            sum = sum + e.cost;        }    }    cout << sum << endl;}int main(){    while (cin>>n)    {        int cnt = 0;        int i, j;        for(i=0;i<n;i++)            for (j = 0; j < n; j++)            {                eg[cnt].u = i;                eg[cnt].v = j;                cin >> eg[cnt].cost;                cnt++;            }        V = n;        E = n*n;        kruskal();    }    return 0;}

大家一起富起来

时间限制: 1000ms 内存限制: 128M

描述

为了促进山区乡镇的发展,政府决定在山区修建道路。由于在山区修路的成本极高,因此修建道路总长越短越好,但是必须保证任意两个乡镇互相通达。

输入
输入:输入有多组,每组的第一行是一个整数N(3<=N<=100),表示乡镇总数。接下来有N行输入,每行N个数,每i行的第j个数表示村庄i和j的距离(距离在[1,1000]区间内)。

输出
对于每组数据,输出需要修建的最短道路长度。

样例输入1
3
0 990 692
990 0 179
692 179 0

样例输出1
871

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 鞋胶把手粘住了怎么办 凉鞋魔术贴长了怎么办 新买的狗一直叫怎么办 刚买的幼犬老叫怎么办 狗狗什么都不吃怎么办 新买的吊扇风小怎么办 夜市卖果汁没电怎么办 榻榻米太长2米45怎么办 木质桌子黏黏的怎么办 白色塑料桌子染色了怎么办 3dmax模型变透明了怎么办 刚养的兔子不吃怎么办 熊猫兔不吃下喝怎么办 熊猫兔感冒了一直打喷嚏怎么办 兔子后腿骨断了怎么办 兔子的腿肿了怎么办 仓鼠喝了牛奶该怎么办 宠物兔不吃不喝怎么办 兔子把木屑吃了怎么办? 小车司机碰瓷大车司机怎么办 在淘宝买到假的护肤品怎么办 淘宝购物发现是假的怎么办 电脑键盘灯不亮不能打字怎么办 海棠兔屁股有屎怎么办 大冒险告白被接受了怎么办剧透微博 大冒险被告白了怎么办 腐书网 大冒险告白被接受了怎么办 006 大冒险告白被接受了怎么办广播剧 coolpad手机解锁图案忘了怎么办 装死兔严重掉毛怎么办 兔子嘴巴磕破了怎么办 嘴巴里面摔烂了怎么办 兔子的鼻子损了怎么办 两个人嘴巴被粘牙糖粘住怎么办 小鸟被老鼠粘粘住了怎么办 小猫被老鼠粘粘住怎么办 羊子嘴巴烂了怎么办 小孩突然嘴肿了怎么办 电视机图像颜色变了 怎么办 冰沙床垫结块了怎么办 冰沙床垫融化了怎么办