1、此程序为c++程序

2、以下代码可实现手动输入,即去掉代码中的/*...*/注释符,并同时去掉赋值代码段

3、源代码

#include<iostream>

using namespace std;

#define MaxInt 32767

#define MVNum 100

typedef struct

{

char vexs[MVNum];

int arcs[MVNum][MVNum];

int vexnum, arcnum;

}AMGraph;

struct

{

char Head, Tail;

int lowcost;

}Edge[MVNum];

int Vexset[MVNum];

void CreateUDN(AMGraph &G);

void MiniSpanTree_Kruskal(AMGraph G);

int LocateVex(AMGraph G, char v);

int main()

{

AMGraph G;

char p = 'y';

while (p == 'y')

{

CreateUDN(G);

MiniSpanTree_Kruskal(G);

cout << "再次执行请输入:y,不执行请输入:n" << endl;

cin >> p;

}

system("pause");

return 0;

}

//生成无向图

void CreateUDN(AMGraph &G)

{

int i, j, k, w;

char v1, v2;

/*cout << "请输入顶点数和边数:";

cin >> G.vexnum >> G.arcnum;

cout << "请输入顶点:";

for (i = 0; i < G.vexnum; i++)

{

cin >> G.vexs[i];

}*/

G.vexnum = 6;

G.arcnum = 10;

G.vexs[0] = 'a';

G.vexs[1] = 'b';

G.vexs[2] = 'c';

G.vexs[3] = 'd';

G.vexs[4] = 'e';

G.vexs[5] = 'f';

//初始化

for (i = 0; i < G.vexnum; i++)

{

for (j = 0; j < G.vexnum; j++)

{

G.arcs[i][j] = MaxInt;

}

}

/*for (k = 0; k < G.arcnum; k++)

{

cout << "请输入边的起点、终点及权值:";

cin >> v1 >> v2 >> w;

Edge[k].Head = v1;

Edge[k].Tail = v2;

Edge[k].lowcost = w;

i = LocateVex(G, v1);

j = LocateVex(G, v2);

G.arcs[i][j] = w;

G.arcs[j][i] = G.arcs[i][j];

}*/

Edge[0].Head = 'a';

Edge[0].Tail = 'b';

Edge[0].lowcost = 6;

G.arcs[0][1] = G.arcs[1][0] = 6;

Edge[1].Head = 'a';

Edge[1].Tail = 'c';

Edge[1].lowcost = 1;

G.arcs[0][2] = G.arcs[2][0] = 1;

Edge[2].Head = 'a';

Edge[2].Tail = 'd';

Edge[2].lowcost = 5;

G.arcs[0][3] = G.arcs[3][0] = 5;

Edge[3].Head = 'b';

Edge[3].Tail = 'c';

Edge[3].lowcost = 5;

G.arcs[1][2] = G.arcs[2][1] = 5;

Edge[4].Head = 'c';

Edge[4].Tail = 'd';

Edge[4].lowcost = 5;

G.arcs[2][3] = G.arcs[3][2] = 6;

Edge[5].Head = 'b';

Edge[5].Tail = 'e';

Edge[5].lowcost = 3;

G.arcs[1][4] = G.arcs[4][1] = 3;

Edge[6].Head = 'c';

Edge[6].Tail = 'e';

Edge[6].lowcost = 6;

G.arcs[2][4] = G.arcs[4][2] = 6;

Edge[7].Head = 'c';

Edge[7].Tail = 'f';

Edge[7].lowcost = 4;

G.arcs[2][5] = G.arcs[5][2] = 4;

Edge[8].Head = 'd';

Edge[8].Tail = 'f';

Edge[8].lowcost = 2;

G.arcs[3][5] = G.arcs[5][3] = 2;

Edge[9].Head = 'e';

Edge[9].Tail = 'f';

Edge[9].lowcost = 6;

G.arcs[4][5] = G.arcs[5][4] = 6;

}

//构造最小生成树

void MiniSpanTree_Kruskal(AMGraph G)

{

int i, j, v1, v2, vs1, vs2;

for (i = 0; i < G.arcnum - 1; i++)

{

for (j = i + 1; j < G.arcnum; j++)

{

if (Edge[i].lowcost >Edge[j].lowcost)

{

Edge[MVNum] = Edge[i];

Edge[i] = Edge[j];

Edge[j] = Edge[MVNum];

}

}

}

for (i = 0; i < G.vexnum; i++)

{

Vexset[i] = i;

}

cout << "最小生成树:" << endl;

for (i = 0; i < G.arcnum; i++)

{

v1 = LocateVex(G, Edge[i].Head);

v2 = LocateVex(G, Edge[i].Tail);

vs1 = Vexset[v1];

vs2 = Vexset[v2];

if (vs1 != vs2)

{

cout << '(' << Edge[i].Head << ',' << Edge[i].Tail << ')' << endl;

for (j = 0; j < G.vexnum; j++)

{

if (Vexset[j] == vs2)

{

Vexset[j] = vs1;

}

}

}

}

}

//确定结点下标

int LocateVex(AMGraph G, char v)

{

int l, i;

for (l = 0, i = 0; i < G.arcnum; i++)

{

if (v == G.vexs[i])

{

l = i;

}

}

return l;

}

Kruskal(测试源代码)的更多相关文章

  1. 多啦爱梦~多啦A梦CSS3测试源代码

    先直接看图片,感觉一下!一直以来,我们都在说浏览器对CSS3支持度这个问题.可是,鉴于知识认识水平问题,又没几个人真正了解CSS3是什么东西,和它在网站显示上的重要性.现在好了,日本某位大神写了个CS ...

  2. JAVA语言课堂测试源代码及使用截图

    1源代码 第一部分 package 开学测试.java;class ScoreInformation {String stunumber;String name;double mathematicss ...

  3. Dijksktra(测试源代码)

    1.此程序为c++程序 2.以下代码可实现手动输入,即去掉代码中的/*...*/注释符,并同时去掉赋值代码段 3.源代码 #include<iostream> using namespac ...

  4. Huffman编码(测试源代码)

    1.此程序为c++程序 2.以下代码可实现手动输入,即去掉代码中的/*...*/注释符,并同时去掉赋值代码段 3.源代码 #include<iostream> using namespac ...

  5. Java开学测试源代码

    package sample; import java.io.IOException;import java.io.Serializable;import java.util.Scanner;impo ...

  6. Asp.net 面向接口可扩展框架之核心容器(含测试代码下载)

    新框架的容器部分终于调通了!容器实在太重要了,所以有用了一个名词叫“核心容器”. 容器为什么那么重要呢?这个有必要好好说道说道. 1.首先我们从框架名称面向接口编程说起,什么是面向接口编程?(这个度娘 ...

  7. Java学习-018-EXCEL 文件写入实例源代码

    众所周知,EXCEL 也是软件测试开发过程中,常用的数据文件导入导出时的类型文件之一,此文主要讲述如何通过 EXCEL 文件中 Sheet 的索引(index)或者 Sheet 名称获取文件中对应 S ...

  8. Java学习-013-文本文件读取实例源代码(两种数据返回格式)

    此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 1.读取的文本文件内容以一维数组[LinkedList<String>]的形式返回,源代 ...

  9. Java学习-012-文件删除实例及源代码

    此文源码主要为应用 Java 创建文件的源代码.若有不足之处,敬请大神指正,不胜感激! 文件删除源代码如下: /** * @function 文件操作:删除文件.若文件存在且未被占用,则删除文件:若文 ...

随机推荐

  1. 使用AXIS2客户端调用 WEBSERVICE

    问题 在调用WEBSERVICE时,可以使用wsdl2java生成java代码,调用接口,这种方法在接口固定的情况下是一种不错的选择,如果需要动态调用接口,那么这样就行不通了. 解决办法 1.直接构建 ...

  2. .net下开发ActiveX控件

    `   ActiveX 是一个开放的集成平台,为开发人员. 用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内容的方法. 使用 ActiveX, 可 ...

  3. 关于js异步上传文件

    好久没登录博客园了,今天来一发分享. 最近项目里有个需求,上传文件(好吧,这种需求很常见,这也不是第一次遇到了).当时第一想法就是直接用form表单提交(原谅我以前就是这么干的),不过表单里不仅有文件 ...

  4. phonegap + xcode5.0.2 配置开发环境

    phonegap官网:  http://phonegap.com/ 第一部:安装nodejs 安装地址:http://nodejs.org/ 安装phoneGap 官网下载http://phonega ...

  5. 关于XE10下Indy发送字符串编码的问题

    在与硬件对接的过程中,之前用D7环境下的UDPServer.Post发送的指令,硬件可正常识别并正常显示, 后来使用到XE10,重新编译之前的源码,发现所有汉字乱码显示了: 后通过对接收数据发现,实际 ...

  6. css个人随笔,适合新手总结整理

    CSS的3种引用方式:1.外部样式表 都是在head标签内使用Link标签来引用的.2.内部样式表 <style type="text/css"> </style ...

  7. 【C#】 格式化说明符 string.Format WriteLine

    定义 格式说明符的语法由3个字段组成:索引号.对齐说明符和格式字段.String.Format和WriteLine都遵守同样的格式化规则. 对齐说明符 对齐说明符表示了字段中字符的最小宽度.对齐说明符 ...

  8. JavaScript 对象的创建

    Object类型是JavaScript中使用最多的一种类型.创建Object实例的方式有多种,接下来一一列举. 1. Object构造函数 person1的friends属性修改影响了person2的 ...

  9. (转)在oracle中varchar和varchar2有什么区别?

    1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节: 2.VARCHAR2把空串等同于null处理,而varchar仍 ...

  10. 在mac上获取iphone当前屏幕截图

    xcode->windows->devices->take screenshot ![](http://o9etp0h70.bkt.clouddn.com/16-9-6/145261 ...