如图就是Kuskal算法
将图中的每条边按照权值从小到大排序,每次加起来就行,注意的是不要形成回路;
重点是如何用代码实现不能形成回路
看代码;
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#define MaxSize 100
using namespace std;
int tu[MaxSize][MaxSize];
struct Edge//储存边的两个顶点以及边的权值
{
    int begin1;
    int end1;
    int weight;
};
bool comp(Edge a,Edge b)
{
    return a.weight<b.weight;
}
void Kruskal(int n)
{
    int vest[MaxSize];
    Edge E[MaxSize];
    int k=0;
    for(int i=1;i<=n;i++)
  for(int j=1;j<=n;j++)
        if(tu[i][j]!=0)
    {
        E[k].begin1=i;//将这条边的一个顶点储存
        E[k].end1=j;//将这条边的另一个顶点储存
        E[k].weight=tu[i][j];//将边的权值储存
        k++;//边的个数
    }
    sort(E,E+k,comp);//按照边的权值从大到小排序
    for(int i=0;i<=n;i++)
        vest[i]=i;//重点:将每个顶点初始化,看作是各不相同的集合
    k=1;
    int j=1,u1,v1,sn1,sn2;
    int sum=0;
    while(k<n)
    {
        u1=E[j].begin1;
        v1=E[j].end1;
        sn1=vest[u1];
        sn2=vest[v1];//此条边的两个点
        if( sn1!=sn2)//两个点不属于一个集合
        {
 
            k++;
           sum+=E[j].weight;
            printf("< %d  ,  %d >:   %d      sum=%d\n", u1-1,v1-1,E[j].weight,sum);
           for(int i=1;i<=n;i++)
                if(vest[i]==sn2)
                vest[i]=sn1;//将找过的边的顶点都赋予相同的值,代表在一个集合内,此段代码将所有连在一起的顶点都标志成一个相同的值即                           vest[顶点编号]都是相同的;
        }
        j++;//遍历下一条边
    }
}
int  main()
{
    int n;
    scanf("%d",&n);
for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    scanf("%d",&tu[i][j]);
    Kruskal(n);
 
    return 0;
}
/*
6
0 6 1 5 9999 9999
6 0 5 9999 3 9999
1 5 0 5 6 4
5 9999 5 0 9999 2
9999 3 6 9999 0 6
9999 9999 4 2 6 0
 
 
*/
 
 
 
 
 
 
 
 
 
 
 
 

最小生成树问题(Kruskal 算法)(克鲁斯卡尔)的更多相关文章

  1. [模板] Kruskal算法 && 克鲁斯卡尔重构树

    克鲁斯卡尔重构树 发现没把板子放上来... 现在放一下 克鲁斯卡尔算法的正确性是利用反证法证明的. 简要地说, 就是如果不加入当前权值最小的边 \(e_1\), 那么之后加入的边和这条边会形成一个环. ...

  2. Kruskal算法 克鲁斯卡尔

    30行 #include <iostream> #include <algorithm> using namespace std; int f[5001],n,m,ans=0, ...

  3. 最小生成树——Kruskal(克鲁斯卡尔)算法

    [0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 Kruskal(克鲁斯卡尔)算法 的idea 并用 源代码加以实现: 0.2)最小生成树的基础知识,参见 ...

  4. 数据结构与算法——克鲁斯卡尔(Kruskal)算法

    目录 应用场景-公交站问题 克鲁斯卡尔算法介绍 克鲁斯卡尔算法图解 克鲁斯卡尔算法分析 如何判断回路? 代码实现 无向图构建 克鲁斯卡尔算法实现 获取一个点的终点解释 应用场景-公交站问题 某城市新增 ...

  5. 最小生成树问题---Prim算法与Kruskal算法实现(MATLAB语言实现)

    2015-12-17晚,复习,甚是无聊,阅<复杂网络算法与应用>一书,得知最小生成树问题(Minimum spanning tree)问题.记之. 何为树:连通且不含圈的图称为树. 图T= ...

  6. 最小生成树问题------------Prim算法(TjuOj_1924_Jungle Roads)

    遇到一道题,简单说就是找一个图的最小生成树,大概有两种常用的算法:Prim算法和Kruskal算法.这里先介绍Prim.随后贴出1924的算法实现代码. Prim算法 1.概览 普里姆算法(Prim算 ...

  7. 最小生成树问题---Prim算法学习

    一个具有n个节点的连通图的生成树是原图的最小连通子集,它包含了n个节点和n-1条边.若砍去任一条边,则生成树变为非连通图:若增加一条边,则在图中形成一条回路.本文所写的是一个带权的无向连通图中寻求各边 ...

  8. Prim算法和Kruskal算法介绍

    一.Prim算法 普利姆(Prim)算法适用于求解无向图中的最小生成树(Minimum Cost Spanning Tree).下面是Prim算法构造最小生成树的过程图解.              ...

  9. 最小生成树,Prim算法与Kruskal算法,408方向,思路与实现分析

    最小生成树,Prim算法与Kruskal算法,408方向,思路与实现分析 最小生成树,老生常谈了,生活中也总会有各种各样的问题,在这里,我来带你一起分析一下这个算法的思路与实现的方式吧~~ 在考研中呢 ...

  10. 最小生成树之克鲁斯卡尔(Kruskal)算法

    学习最小生成树算法之前我们先来了解下 下面这些概念: 树(Tree):如果一个无向连通图中不存在回路,则这种图称为树. 生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的 ...

随机推荐

  1. win2008 64位下.net 无法访问oracle

    这两天换了台新机子,就想弄个新系统win2008 64bit来测试下,也尝尝新鲜,结果是碰的头破血流啊,哈哈就像挖宝似的 环境:win2008 64bit + IIS7+.net2.0 +ORACLE ...

  2. For and While loop choice.

    /* Difference between 'for' and 'while'. We can transform everything between 'for' and 'while'. if t ...

  3. 给sqlserver配置内存参数

    操作环境:windows server 2003 R2 Enterprise Edition SP1 + 4G 内存 + Sqlsever 2005 在以上环境中,运行公司的ERP数据服务,sqlse ...

  4. Tomcat下work文件夹的作用

    1.打补丁,重启tomcat时要删除work文件夹,有缓存. 2.work目录只是tomcat的工作目录,也就是tomcat把jsp转换为class文件的工作目录 jsp,tomcat的工作原理: 当 ...

  5. tableView嵌套collectionView

    首先是自定义collectionView填充的tableViewCell import UIKit // 定义一个collectionView,重写初始化大小和布局方法 class TrendsDet ...

  6. C# div、css

    目录: 1.Div+Css布局教程(-)CSS必备知识 注:本教程要求对html和css有基础了解. 一.CSS布局属性 Width:设置对象的宽度(width:45px). Height:设置对象的 ...

  7. 【转】ASP.NET MVC 入门教程列表

    ASP.NET MVC小论 2008-12-04 11:11 by T2噬菌体, 8052 visits, 网摘, 收藏, 编辑 摘要:ASP.NET MVC作为微软官方的.NET平台下MVC解决方案 ...

  8. ecshop 嵌入地图加载不了问题

    在ecshop 添加一个标识商家地理位置信息. 百度地图,加载不出来,查了下发现跟 js/transport.js 与 js/utils.js 两个文件有关在需要插入地图的地方去掉这两个文件的引用 地 ...

  9. TatukGIS - GisDefs - CreateMSJET 函数

    函数名称  CreateMSJET 所在单元  GisDefs 函数原型           function CreateMSJET(const _path: String): String;   ...

  10. iOS 取得CGimage字节数据的方法

    通过我在网上搜索和总结,目前看来,我发现两种比较方便的方式. 1. CGImage -> CGDataProvider -> CFData -> xx * CGDataProvide ...