无向连通图的生成树kruskal

采用kruskal(克鲁斯卡尔) 算法求无向连通网图的一棵最小生成树。

#include

using namespace std;

const int MaxSize=6; // 顶点数

const int m=9; //边数

int vertexNum, arcNum; //顶点数和边数

char vertex[MaxSize]; //顶点数组

int parent[MaxSize];

struct EdgeType

{

int from, to;

int weight;

};

EdgeType edge[m];

void edgesz(char a[], int n, int e)

{

int i,j,k,w;

vertexNum=n; arcNum=e;

for (i=0; i

for (k=0; k

{

cin>>i>>j>>w; //边依附的两个顶点的序号及权值

edge[k].from=i;edge[k].to=j;edge[k].weight=w;

}

}

int FindRoot(int parent[], int v)

{

int t;

t=v;

while ( parent[t]>-1) t=parent[t];

return t;

}

void DubbleSort(EdgeType r[],int n)

{

int exchange,bound,j,k;

exchange=n-1; //第一趟的区间为1-- n

while(exchange) //当还未完全有序

{ bound=exchange; //传递本趟最后交换位置

exchange=0;

for(j=0;j

if (r[j].weight>r[j+1].weight)

{

k=r[j].from;r[j].from=r[j+1].from;r[j+1].from=k;

k=r[j].to;r[j].to=r[j+1].to;r[j+1].to=k;

k=r[j].weight;r[j].weight=r[j+1].weight;r[j+1].weight=k;

exchange=j; } //记录交换位置

}

}

//kruskal(克鲁斯卡尔) 算法

int main()

{

int i;

char a[MaxSize];

cout

for (i=0;i>a[i];

cout

DubbleSort(edge,m);

cout

Kruskal();

cout

return 0;

}

采用kruskal(克鲁斯卡尔) 算法求无向连通网图的一棵最小生成树。

#include

using namespace std;

const int MaxSize=6; // 顶点数

const int m=9; //边数

int vertexNum, arcNum; //顶点数和边数

char vertex[MaxSize]; //顶点数组

int parent[MaxSize];

struct EdgeType

{

int from, to;

int weight;

};

EdgeType edge[m];

void edgesz(char a[], int n, int e)

{

int i,j,k,w;

vertexNum=n; arcNum=e;

for (i=0; i

for (k=0; k

{

cin>>i>>j>>w; //边依附的两个顶点的序号及权值

edge[k].from=i;edge[k].to=j;edge[k].weight=w;

}

}

int FindRoot(int parent[], int v)

{

int t;

t=v;

while ( parent[t]>-1) t=parent[t];

return t;

}

void DubbleSort(EdgeType r[],int n)

{

int exchange,bound,j,k;

exchange=n-1; //第一趟的区间为1-- n

while(exchange) //当还未完全有序

{ bound=exchange; //传递本趟最后交换位置

exchange=0;

for(j=0;j

if (r[j].weight>r[j+1].weight)

{

k=r[j].from;r[j].from=r[j+1].from;r[j+1].from=k;

k=r[j].to;r[j].to=r[j+1].to;r[j+1].to=k;

k=r[j].weight;r[j].weight=r[j+1].weight;r[j+1].weight=k;

exchange=j; } //记录交换位置

}

}

//kruskal(克鲁斯卡尔) 算法

int main()

{

int i;

char a[MaxSize];

cout

for (i=0;i>a[i];

cout

DubbleSort(edge,m);

cout

Kruskal();

cout

return 0;

}


相关文章

  • 求无向连通图的最小生成树算法--Prim与Kruskal及相关优化
  • 最小生成树是图论里很重要的部分.但是由于它属于图论所以NOIP基本不考,对于NOI又太基础,所以竞赛中出现的几率比较小,即使要考也不可能考裸的生成树算法= = 最小生成树就Prim和Kruskal两个算法,又没有多大的优化余地,所以学习起来 ...查看


  • 图的遍历与最小生成树
  • 二中信息学奥赛培训讲义 图论1--图的遍历与图的最小生成树 一.图的遍历 图的遍历:从图的某顶点出发,访问图中所有顶点,并且每个顶点仅访问一次.在图中,访问部分顶点后,可能又沿着其他边回到已被访问过的顶点.为保证每一个顶点只被访问一次,必须 ...查看


  • 数据结构答案
  • 第一章 一.选择题 1 从逻辑上可以把数据结构分为( C)两大类. A .动态结构.静态结构 B.顺序结构.链式结构 C .线性结构.非线性结构 D.初等结构.构造型结构 2在下面的程序段中,对x 的赋值语句的频度为(C ) FOR i:= ...查看


  • [离散数学]同步练习答案
  • 华南理工大学网络教育学院 <离散数学>练习题参考答案 第一章命题逻辑 一填空题 (1)设:p :派小王去开会.q :派小李去开会.则命题: "派小王或小李中的一人去开会" 可符号化 为: (p ∨⌝q ) ∧ ...查看


  • 数据结构课程设计-最小生成树问题
  • 安徽省巢湖学院计算机与信息工程 学院 课程设计报告 课程名称 最小生成树问题 课题名称 专 业 班 级 10计本2班 学 号 10012121 姓 名 张娟 联系方式 [1**********] 指导教师 江家宝 20 11 年 12 月 ...查看


  • 离散数学图论整理
  • 总 结 第八章 图论 8.1 图的基本概念 8.1.1 图 定义8.1―1 一个图G 是一个三重组〈V (G ), E (G ), ΦG 〉, 其中V (G ) 是一个非空的结点(或叫顶点) 集合, E (G ) 是边的集合, ΦG 是从边 ...查看


  • 图论 第四讲 经典算法
  • 图论的经典算法 图的经典算法是必须掌握的,背也要背过.联赛中考图论也是在经典算法的基础上,考的是灵活应用.所以经典算法是必要的工具.图的经典算法有求单源最短路径的,,求负权回路的,多源最短路径的,,最小生成树的prim 和kruskal , ...查看


  • 运筹学大纲
  • <运筹学>课程教学大纲 (适用于数学与应用数学专业) 课程编号:3200544060 总学时: 48 总学分:3 开课学期:5 课程类型:专业方向课 先修课程:线性代数.概率论.数理统计 一.课程教学目的: <运筹学> ...查看


  • 离散数学模拟试卷
  • <离散数学>模拟题 一.选择题 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内. 1.在命题演算中,语句为真为假的一种性质称为 ( ) A )真值 B )陈述句 C )命题 D )谓词 2.下列 ...查看


热门内容