主要代码如下: #include
using namespace std;
const int MAX_EDGE = 100;
const int MAX_NODE = 100;
/*
定义一条边
*/
typedef struct{
int v;
int t;
int weight;
bool isMST;
}Edge;
/*
有关算法的一些变量
*/
Edge edges[MAX_EDGE];
int nodeSet[MAX_EDGE];
const int MSTSetNum = -1;
int edgeNum;
bool nodeIsMST[MAX_NODE];
int Exchange(Edge *a,Edge *b)
{
Edge t;
t = *a;
*a = *b;
*b = t;
return 0;
}
/*
实现快速排序算法quick_sort
*/
int partition(Edge*edges,int p,int r)
{
int i = p-1,j = p;
for(;j
{
if(edges[j].weight <= edges[r].weight)
{
i++;
exchange(edges+i,edges+j);
}
}
exchange(&edges[i+1],&edges[r]);
return i+1;
}
int quick_sort(Edge edges[],int p,int r)
{
if(p < r)
{
int q = partition(edges,p,r);
quick_sort(edges,p,q-1);
quick_sort(edges,q+1,r);
}
return 0;
}
void Initialize(int nodeSet[],int edgeNum);
void MST_Kruskal(int n);
void test();
int main()
{
test();
return 0;
}
void Initialize(int nodeSet[],int n)
{
if(edgeNum > MAX_EDGE)
{
printf("The total num of edges must be less than %d\n",MAX_EDGE);
exit(EXIT_FAILURE);
}
else
{
int i = 0;
edgeNum = n;
for(;i
{
nodeSet[i] = i;
}
}
}
void MST_Kruskal(int n)
{
Initialize(nodeSet,n);
quick_sort(edges,0,edgeNum-1);
int i;
for(i = 0;i
{
if(nodeSet[edges[i].v]!=nodeSet[edges[i].t])
{
edges[i].isMST = true;
if(i==7)
i = i;
if(nodeIsMST[edges[i].v] || nodeIsMST[edges[i].t])
{
int j;
for(j = 0;j<=i;j++)
{
if(edges[j].isMST)
{
if(edges[j].v == edges[i].v ||
edges[j].t == edges[i].v||
edges[j].v == edges[i].t||
edges[j].t == edges[i].t)
nodeSet[edges[j].v] = nodeSet[edges[j].t] = MSTSetNum;
}
}
nodeIsMST[edges[i].v] = nodeIsMST[edges[i].t] = true;
}
else
{
nodeSet[edges[i].v] = nodeSet[edges[i].t];
nodeIsMST[edges[i].v] = nodeIsMST[edges[i].t] = true;
}
}
}
}
/*
测试函数
*/
void test()
{
edges[0].v = 0,edges[0].t = 1,edges[0].isMST = false,edges[0].weight = 4;
edges[1].v = 0,edges[1].t = 8,edges[1].isMST = false,edges[1].weight = 8;
edges[2].v = 1,edges[2].t = 2,edges[2].isMST = false,edges[2].weight = 8;
edges[3].v = 1,edges[3].t = 7,edges[3].isMST = false,edges[3].weight = 11;
edges[4].v = 2,edges[4].t = 8,edges[4].isMST = false,edges[4].weight = 2;
edges[5].v = 2,edges[5].t = 5,edges[5].isMST = false,edges[5].weight = 4;
edges[6].v = 2,edges[6].t = 3,edges[6].isMST = false,edges[6].weight = 7;
edges[7].v = 3,edges[7].t = 4,edges[7].isMST = false,edges[7].weight = 9;
edges[8].v = 3,edges[8].t = 5,edges[8].isMST = false,edges[8].weight = 14;
edges[9].v = 4,edges[9].t = 5,edges[9].isMST = false,edges[9].weight = 10;
edges[10].v = 5,edges[10].t = 6,edges[10].isMST = false,edges[10].weight = 2;
edges[11].v = 6,edges[11].t = 7,edges[11].isMST = false,edges[11].weight = 1;
edges[12].v = 6,edges[12].t = 8,edges[12].isMST = false,edges[12].weight = 6;
edges[13].v = 7,edges[13].t = 8,edges[13].isMST = false,edges[13].weight = 7;
MST_Kruskal(14);
int i,j;
for(i = 0,j = 0;i<14;i++)
{
if(edges[i].isMST)
{
printf("%d. (%d,%d)-------%d\n",j+1,edges[i].v,edges[i].t,edges[i].weight);
j++;
}
}
}
C++的CIN和COUT操作符的方法
- C++(72817)
- CIN(11748)
- COUT(7812)
- 操作符(8987)
相关推荐
MATLAB操作符和特殊字符
MATLAB操作符和特殊字符* 矩阵乘法 .* 数组乘法 ^ 矩阵幂 .^ 数组幂 \ 左除或反斜杠 / 右除或斜杠 ./ 数组除 Kron Kronecker张量积 .. 父目录 … 继续
2009-09-22 16:05:17
关于右值引用的一点理解
我们知道对于一些C++内建类型来说,ostream类的操作符<<都提供了输出到标准输出流的方法,只需要像下面这样就能输出到终端窗口了。
2023-07-21 17:38:14
179


Linux命令中“!”操作符的用法
Linux中的'!'符号或操作符可以用作逻辑否定运算符,也可以用于在历史记录中获取命令并进行修改或运行以前执行过的命令。
2023-07-05 10:07:15
1003

DC-DC的输入电容Cin和输出电容Cout计算选型
实际上DC-DC的输入电容Cin和输出电容Cout是特别关键的器件,在负载波动大影响Vin时,Cin不仅可以辅助Vin提供电流,缩短Vin的响应时间,还可以稳定输入电压Vin。而Cout更为关键。
2023-07-01 12:53:45
502


如何计算DC-DC的输入电容Cin与输出电容Cout
引言:实际上DC-DC的输入电容Cin和输出电容Cout是特别关键的器件,在负载波动大影响Vin时,Cin不仅可以辅助Vin提供电流,缩短Vin的响应时间,还可以稳定输入电压Vin。而Cout更为
2023-06-15 15:14:06
775


new和malloc函数详细分析底层逻辑
new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该
2023-04-03 09:29:01
280

C++入门之表达式
C++中提供了很多操作符且定义了什么时候可以用于操作基本类型,其还允许我们定义用于操作class类型的操作符,接下来几篇文章将会介绍C++中用于基本类型的操作符,与此同时也会介绍一些库中操作符。一个
2023-03-17 13:55:04
249

C语言的表达式
在C语言中,表达式是由操作符和操作数组成。表达式可以由一个或者多个操作数组成,不同的操作符与操作数组成不同的表达式,因此,表达式才是C语言的基本。
2023-02-21 15:09:23
586


Linux内核中C语法扩展-语句表达式
表达式和语句是 C 语言中的基础概念。什么是表达式呢?表达式就是由一系列操作符和操作数构成的式子。操作符可以是 C 语言标准规定的各种算术运算符、逻辑运算符、赋值运算符、比较运算符等。
2023-02-17 09:30:43
2138

STM32中比较常见的C语言基础知识介绍
在不改变其他位的值的状况下,对某几个位进行设值。这个场景在单片机开发中经常使用,方法就是我们先对需要设置的位用&操作符进行清零操作,然后用 | 操作符设值。
2023-02-05 11:50:55
350

STM32中较为常见的C语言基础知识
C语言是单片机开发中的必备基础知识,本文列举了部分 STM32 学习中比较常见的一些C语言基础知识。 1位操作 下面我们先讲解几种位操作符,然后讲解位操作使用技巧。C语言支持以下六种位操作: 下面
2023-02-03 01:21:10
1220

C++入坑指南
C++最主要的用途是开发基础软件设施,和在有限资源的条件上运行的应用程序。因为它有一种独特的能力,可以直接操作它所运行的硬件或者机器,即使在硬件空间资源受限的情况下,C++程序依旧可以高效的运行,所以在这种条件下,C++几乎是完美的选择。
2023-01-04 15:56:24
268

C++中前置操作性能一定优于后置操作?
自入行以来,无论是查阅资料、技术博客亦或是同事间的技术交流,都有一个共识:在循环的时候,务必使用前置操作符,因为其性能优于后置操作符,久而久之,这个就像一个不成文的规定,大家都在遵循,久而久之,成为潜移默化的编码习惯。而使得大家持有这个观点的原因就是后置操作会产生临时变量,而后置操作则不会。
2022-11-17 11:58:40
270

C语言位操作
目录前言一、位操作符及其常用方式二、实例应用解析(嵌入式笔试常考)前言 位操作在单片机的C语言开发中经常会用到,该操作主要用于读写寄存器,这篇文章将会对其的常用方法进行简要概述。一、位操作符及其
2021-12-22 19:09:55
12

嵌入式C语言常用知识点
导读C 语言是单片机开发中的必备基础知识。我们这里就列举部分STM32学习中会遇见的C 语言基础知识点1.位操作下面我们先讲解几种位操作符,然后讲解位操作使用技巧。C语言支持如下6中位操作:(图1
2021-11-29 17:06:05
5

C++输入和输出的真实面目
C++输入和输出 在C++里std::cin、std::cout、std::cerr和std::endl分别是标准输入、标准输出、标准错误输出和刷新缓冲区并换行,它们都在命名空间std中,那么它们
2021-09-29 15:22:39
1335

在C++中如何用虚函数实现多态
01 — C++虚函数探索 C++是一门面向对象语言,在C++里运行时多态是由虚函数和纯虚函数实现的,现在我们看下在C++中如何用虚函数实现多态。先来看一段代码
2021-09-29 14:18:49
1293

C++之操作重载符学习的总结(二)
复数的概念可以通过自定义类实现;复数中的运算操作可以通过操作符重载实现;赋值操作符只能通过成员函数实现;操作符重载的本质为函数定义。
2020-12-24 16:26:46
294

用HDL代码描述加法运算要用操作符“+” 看似很简单实则不然
采用HDL代码描述加法运算只需要用操作符+即可,这看似很简单,这里我们以两个4-bit数相加为例,对输入/输出数据均寄存,从而形成如下图所示电路。 此电路对应的HDL代码如下图所示。这里采用
2020-09-24 14:31:15
1821


C语言的sizeof操作符基础和经典问题
在C语言中,sizeof是一个操作符(operator),而不是函数!其用于判断数据类型或者表达式长度(所占的内存字节数)。其有两种表达形式:
2020-04-04 17:39:00
2179


Linux中命令链接操作符的实际应用
Linux命令中的链接的意思是,通过操作符的行为将几个命令组合执行。Linux中的链接命令,有些像你在shell中写短小的shell脚本,并直接在终端中执行。链接使得自动处理变得更方便。
2019-05-06 17:44:00
665

C++程序设计教程之运算符重载的详细资料说明
本文档详细介绍的是C++程序设计教程之运算符重载的详细资料说明主要内容包括了:1. 什么是运算符重载,2. 运算符重载的方法,3. 重载运算符的规则,4. 运算符重载函数作为类成员函数和友元函数
2019-03-14 16:04:00
4

C++程序设计教程之数据类型与表达式的详细资料说明
本文档的主要内容详细介绍的是C++程序设计教程之数据类型与表达式的详细资料说明包括了:1 . C++的数据类型,2 . 常量,3 . 变量,4 . C++的运算符,5 . 算术运算符与算术表达式,6 . 赋值运算符与赋值表达式,7. 逗号运算符与逗号表达式
2019-03-14 14:48:25
0

C++程序设计教程之类的详细资料说明
) , 3.操作符 ( Operators ) , 4.再论程序结构 ( Program Struture Restatement ), 5.屏蔽类的实现 ( Shield Class Implementations ) , 6.静态成员 ( Static Members ) ,7.友元 ( Friends )
2019-02-22 09:44:00
2

Visual C++教程之C++的语言资料概述免费下载
本文档详细介绍的是Visual C++教程之C++的语言资料概述免费下载主要内容包括了:1 从C到C++的程序结构 ,2 程序书写规范,3 数据类型,4 运算符和表达式,5 基本语句 ,6 函数,7 指针和引用,8 作用域和存储类型 ,9 预处理
2019-02-15 15:59:35
3

C++入门教程之数据类型、运算符和表达式的详细资料说明
本文档的详细介绍的是C++入门教程之数据类型、运算符和表达式的详细资料说明。主要内容包括了:
基本数据类型
常量和变量
输入输出
运算符和表达式
数据类型的转换
构造数据类型
2019-02-15 11:26:17
2

VISUAL C++教程之VISUAL C++的安装和使用方法
本文档的主要内容详细介绍的是VISUAL C++教程之VISUAL C++的安装和使用方法资料免费下载。
2018-12-27 16:32:16
18

如何快速入门运维?了解Linux中的10个命令链接操作符
Linux命令中链接的意思是,通过操作符的行为将几个命令组合执行。Linux中的链接命令,有些像你在shell中写短小的shell脚本,并直接在终端中执行。链接使得自动处理变得更方便。不仅如此,一个无人看管的机器在链接操作符的帮助下能够十分有条理地运行。
2018-10-03 19:33:00
2769

关于Tcl中的数学运算
expr命令所支持的计算操作符是C语言中操作符的一个子集,并且写法、优先级也和C语言中的完全一致,包括基本计算符(加、减、乘、除、取余)、关系运算符、逻辑运算符、移位运算符、按位逻辑运算符和三重
2018-09-04 10:22:14
8573

C++语法的外围基础
程序对内存空间的动态分配的频繁程度要求简化语言的相关语法的格式。C++语法规定new算符等效于C语言中mal1oc一类的函数功能;free算符等效于C语言中free一类的函数功能。其格式为: 指向对应类型的指针=new 类型描述符; delete 指向对应类型的指针;
2018-03-15 16:55:32
10

条件运算符的用法_C运算符的结合方向
条件运算符优先级高于赋值、逗号运算符,低于其他运算符。在标准C语言的文档里,对操作符的结合性并没有作出非常清楚的解释。一个满分的回答是:它是仲裁者,在几个操作符具有相同的优先级时决定先执行哪一个
2018-02-24 16:36:33
9257

Linux中的链接操作符可降低系统负载、写出更加简短有意义的代码
链接使得自动处理变得更方便,不仅如此,一个无人看管的机器在链接操作符的帮助下能够十分有条理地运行。
2017-12-22 11:52:14
1296

分享java虚拟机原理图解
Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载
2017-12-01 15:20:05
2256


C++内存泄漏分析方法
C++是一种非常流行的计算机编程语言,在使用的过程中容易出现内存泄漏问题,而该问题往往难以识别。给出了一种对C++内存泄漏问题进行分析的方法,该方法得到C++源代码的抽象语法树,从抽象语法树中提
2017-11-23 11:19:03
5

Verilog HDL程序设计例程
【例 3.1】4 位全加器 module adder4(cout,sum,ina,inb,cin); output[3:0] sum; output cout; input[3:0] ina,inb; input cin; assign {cout,sum}=ina+inb+cin; endmodule
2011-09-07 16:16:28
176

华为内部员工培训资料-C++课件
C++语言中级教材讲授C++语言的运用技术,包括:类、对象之间的关系、对象的存储与布局、运算符重载、智能指针、仿函数、泛型编程,C++模式设计基本思想。
目 &n
2008-10-16 14:10:23
286

密码编码学(加密方法的C与C++实现) pdf第二版
密码编码学(加密方法的C与C++实现)分分三个部分。第一部分描述密码学中的常用算法和数论算法,以及这些算法的C和C++程序实;第二部分描述密码算法的C和C++实现,主要包括RSA系
2008-09-25 09:49:06
250

评论