`
niyayu
  • 浏览: 34137 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Kruskal最小生成树

 
阅读更多
#include<iostream>
#include<algorithm>

using namespace std;

#define MAX 101

struct stuEdge
{
int nFrom;
int nCost;
int nTo;
};

int nInput(stuEdge stuArr[],int nN);
void vSort(int nEdge,stuEdge stuArr[]);
bool bCmp(const stuEdge &stuA,const stuEdge &stuB);
void vMem(int nArr[],int nN);
int nKruskal(int nArr[],stuEdge stuArr[],int nN);
void vCombine(int nN,int nArr[],int nFrom,int nTo);
void vOutput(int nOut);

int main()
{
int nNum;
int nEdgeNum;
int nSet[MAX];
int nAns;
stuEdge stuEdgeArr[MAX*(MAX-1)/2+1];

while(1==scanf("%d",&nNum))
{
nEdgeNum=nInput(stuEdgeArr,nNum);
vSort(nEdgeNum,stuEdgeArr);
vMem(nSet,nNum);
nAns=nKruskal(nSet,stuEdgeArr,nNum);
vOutput(nAns);
}

return 0;
}

int nInput(stuEdge stuArr[],int nN)
{
int i,j;
int nCount;
int nTemp;

nCount=0;
for(i=1;i<=nN;i++)
{
for(j=1;j<=nN;j++)
{
scanf("%d",&nTemp);
if(i<j)
{
nCount++;
stuArr[nCount].nCost=nTemp;
stuArr[nCount].nFrom=i;
stuArr[nCount].nTo=j;
}
}
}
return nCount;
}

void vSort(int nEdge,stuEdge stuArr[])
{
sort(&stuArr[1],&stuArr[nEdge+1],bCmp);

}

bool bCmp(const stuEdge &stuA,const stuEdge &stuB)
{
return (stuA.nCost<stuB.nCost);
}

void vMem(int nArr[],int nN)
{
int i;

for(i=1;i<=nN;i++)
{
nArr[i]=i;
}
}

int nKruskal(int nArr[],stuEdge stuArr[],int nN)
{
int nRet;
int nCount;
int nEdgeInd;
int nF,nT;

nRet=0;
nCount=nN;
nEdgeInd=1;
while(nCount>1)
{
nF=nArr[stuArr[nEdgeInd].nFrom];
nT=nArr[stuArr[nEdgeInd].nTo];

if(nF!=nT)
{
nRet+=stuArr[nEdgeInd].nCost;
nCount--;
vCombine(nN,nArr,nF,nT);
}
nEdgeInd++;
}

return nRet;
}

void vOutput(int nOut)
{
printf("%d\n",nOut);
}

void vCombine(int nN,int nArr[],int nFrom,int nTo)
{
int i;

for(i=1;i<=nN;i++)
{
if(nArr[i]==nTo)
{
nArr[i]=nFrom;
}
}
}
分享到:
评论

相关推荐

    kruskal最小生成树实现

    Kruskal算法是求解加权无向图最小生成树的经典算法之一,由Joseph Kruskal在1956年提出。本文将详细介绍Kruskal算法的原理、实现步骤以及C++编程实践。 **Kruskal算法的基本思想:** Kruskal算法的核心理念是逐步...

    kruskal最小生成树C++代码

    我自己编写的一个C++ kruskal最小生成树程序,希望可以对初学者有所帮助,错误难以避免,希望大家谅解

    最小生成树Kruskal算法

    编写算法能够建立带权图,并能够用Kruskal算法求该图的最小生成树。最小生成树能够选择图上的任意一点做根结点。最小生成树输出采用顶点集合和边的集合的形式。

    Kruskal最小生成树算法

    对给定的图结构,实现求解最小生成树的Kruskal算法。每次在满足和已选边不构成回路的条件下选择一条权植最小的边,添加到新的生成数中。Kruskal算法的实现类似于计算连通枝的算法。它使用了分离集合数据结构以保持数...

    C例子:最小生成树(kruskal)

    该程序是我写的博客“一起talk C栗子吧(第五十回:C语言实例--最小生成树二)”的配套程序,共享给大家使用

    Kruskal最小生成树算法实验报告1

    【Kruskal最小生成树算法】是图论中的一个重要算法,属于贪心算法的一种。它的基本思想是:从图中权重最小的边开始,逐步添加边到生成树中,但要确保每次添加的边不会形成环路。算法分为以下几个关键点: 1. **算法...

    kruskal 最小生成树 C

    以前的作业,为了挣点分,呵呵。 基本都能够运行的,当作作业不错。

    图的基本操作与kruskal最小生成树实验报告.pdf

    《图的基本操作与Kruskal最小生成树实验报告》 实验报告主要涵盖了图的基本操作,包括图的存储结构、遍历算法以及一个实际的实验设计。在这个实验中,重点是理解并实现图的深度优先遍历(DFS)和广度优先遍历(BFS...

    图的基本操作与kruskal最小生成树实验报告.docx

    【标题】:“图的基本操作与kruskal最小生成树实验报告” 【描述】:该文档是一份关于图的基本操作的实验报告,特别是针对图的深度优先遍历(DFS)和广度优先遍历(BFS)的实现。实验旨在巩固图论知识,熟悉图的...

    Kruskal实现最小生成树代码

    最后,`最小生成树-Kruskal`这个文件可能是Kruskal算法的具体实现代码,可能包含一个或多个文件,如C++、Java、Python等语言的实现。通过阅读和理解这些代码,你可以更深入地掌握Kruskal算法的细节以及并查集的运用...

    kruskal最小生成树graph表示

    最小生成树的graph形式,易于操作 在界面上画点,划线和输入各线权值,即可生成最小生成树

    用Prim和Kruskal算法构造最小生成树

    ### 使用Prim和Kruskal算法构建最小生成树 在图论中,最小生成树(Minimum Spanning Tree, MST)是一个非常重要的概念。对于一个连通的无向图来说,如果存在一个子图,它包含原图的所有顶点,并且这些顶点通过边...

    prim+kruskal最小生成树

    prim最小生成树的C++代码,代码长度为95行,使用C++编写

    数据结构课程设计报告最小生成树Kruskal算法

    数据结构课程设计报告最小生成树Kruskal算法 数据结构课程设计报告中,我们将使用Kruskal算法来生成最小生成树,该算法是图论中的一种经典算法,能够在给定的图中找到最小生成树。下面,我们将对Kruskal算法的实现...

    代码 最小生成树Kruskal算法代码.rar

    代码 最小生成树Kruskal算法代码代码 最小生成树Kruskal算法代码代码 最小生成树Kruskal算法代码代码 最小生成树Kruskal算法代码代码 最小生成树Kruskal算法代码代码 最小生成树Kruskal算法代码代码 最小生成树...

    Prim算法与Kruskal算法求最小生成树

    1. **引言**:介绍最小生成树的概念,以及Prim和Kruskal算法的基本思想。 2. **算法描述**:详细解释两种算法的步骤,包括伪代码或流程图。 3. **实现细节**:展示如何用编程语言(如C++、Java或Python)实现这两种...

    Prim与Kruskal算法的最小生成树matlab实现

    在通信网理论作业3-最小生成树这个项目中,你可能会学习如何用MATLAB编写代码,实现Prim和Kruskal算法,并对给定的网络图数据进行最小生成树的构造。这将涉及到数据结构的设计、图的遍历以及最小生成树的验证等编程...

    Kruskal算法生成最小代价生成树

    如果不在,说明添加这条边不会形成环路,将其加入到最小生成树中,并使用并查集合并这两个顶点所在的连通分量。 4. **循环直至连通**:重复步骤3,直到添加的边数量等于顶点数量减一,即形成了一个连通的树。 在...

    最小生成树kruskal算法

    ### 最小生成树Kruskal算法详解 #### 算法背景与定义 最小生成树(Minimum Spanning Tree,简称MST)是图论中的一个经典问题,涉及到在一个加权图中寻找一棵包含所有顶点的子图,使得这棵子图的总权重最小。在实际...

Global site tag (gtag.js) - Google Analytics