第三章 贪心算法
贪心算法实验报告算法实验贪心法实验报告

贪心算法实验报告算法实验贪心法实验报告西安邮电大学(计算机学院)课内实验报告实验名称:贪心算法专业名称:班级:学生姓名:学号(8指导教师:实验日期:一. 实验目的及实验环境1.练习掌握最有分解问题的规划设计与实现;2.熟练掌握递归算法的设计及应用,怎样才能使算法的空间复杂度和时间复杂度最低;基于Linux系统下的ubuntu或其他的编辑器二. 实验内容1. 设n是一个正整数,现在要求将n分解为若干互不相同的自然数的和,且使这些自然数的乘积最大三.方案设计1.先将这个数分解成以2开始的连续的若干因子,它们的和加起来是n,将此数在后项优先的方式下均匀地分给前面各项。
保证正整数所分解出的因子之差的绝对值最小,即| a – b |最小,可以保证分解乘积越大。
四.测试数据及运行结果1.正常测试数据(3组)及运行结果;A.2.非正常测试数据(2组)及运行结果A.B.五.总结1.实验过程中遇到的问题及解决办法;在实验过程中错误不断地出现,我认真地查阅书籍,研究课本上例题,并且在同学的帮助下纠正了自己的错误,得出了正确的结果。
2.对设计及调试过程的心得体会。
在程序的运行与调试过程中出现了很多错误,但是通过自己复习课本知识、查询资料等,修改后得出了正确的结果。
而且我觉得自己一定要敢于尝试,即使没有结果但是勇于实践就会有意想不到的收获。
所以在以后的学习中我觉得我们一定要集中精力、端正自己态度,提高自己的成绩。
当然我也认识到了自己的薄弱之处,因此我一定争取做的能让自己满意,做的更好。
六.附录:源代码(电子版)#include#includevoid open_file(int n){FILE *fp;if((fp=fopen(“input.txt”,”wt”))==NULL) {printf(“the file write failed.\n”);exit(1);}fprintf(fp,”%2d\n”,n);fclose(fp);}void save_file(int sum){FILE *fp;if((f p=fopen(“output.txt”,”wt”))==NULL) {printf(“ the file save failed!.\n”);exit(1);}fprintf(fp,”%2d\n”,sum);fclose(fp);if((fp=fopen(“output.txt”,”r”))==NULL) {printf(“save file failed!\n”);exit(1);}fscanf(fp,”%2d”,&sum);printf(“\n鏈€澶х?d\n”,sum);fclose(fp);}int MAX(int n){int i=2,j=0,data[n],sum=0,max=1; int lenth; while(sum+i{sum+=i;data[j]=i;i++;j++;}lenth=j;i=n-sum;while(i>0){if(j{data[j+i]+=1;i--;j--;}else{data[j-1]+=1;i--;j--;}}for(i=0;imax*=data[i];return max;}int main(){int n,max;srand((unsigned)time(NULL)); n=rand()%100; open_file(n);printf(“ 杩欎釜鏁版槸%d:\n”,n); max=MAX(n); save_file(max);return 0; }百度搜索“就爱阅读”,专业资料,生活学习,尽在就爱阅读网,您的在线图书馆。
贪心算法的基本原理

贪心算法的基本原理贪心算法(Greedy Algorithm)是一种常用的算法思想,它在求解最优化问题时通常能够得到较好的近似解。
贪心算法的基本原理是:每一步都选择当前状态下的最优解,从而希望最终能够得到全局最优解。
在实际应用中,贪心算法常常用于解决一些最优化问题,如最小生成树、最短路径、任务调度等。
一、贪心算法的特点贪心算法具有以下特点:1. 简单:贪心算法通常比较简单,易于实现和理解。
2. 高效:贪心算法的时间复杂度通常较低,能够在较短的时间内得到结果。
3. 局部最优:每一步都选择当前状态下的最优解,但不能保证最终能够得到全局最优解。
4. 适用范围:贪心算法适用于一些特定类型的问题,如无后效性、最优子结构等。
二、贪心算法的基本原理贪心算法的基本原理可以概括为以下几个步骤:1. 初始状态:确定问题的初始状态,定义问题的输入和输出。
2. 状态转移:根据当前状态,选择局部最优解,并更新状态。
3. 筛选解:判断当前状态下是否满足问题的约束条件,若满足则保留该解,否则舍弃。
4. 终止条件:重复以上步骤,直至满足终止条件,得到最终解。
三、贪心算法的应用举例1. 找零钱:假设有 25、10、5、1 四种面额的硬币,需要找零 41 元,如何使得找零的硬币数量最少?贪心算法可以先选择面额最大的硬币,然后逐步选择面额较小的硬币,直至找零完毕。
2. 区间调度:给定一组区间,如何选择最多的互不重叠的区间?贪心算法可以先按照区间的结束时间排序,然后依次选择结束时间最早的区间,直至所有区间都被覆盖。
3. 最小生成树:在一个连通的带权无向图中,如何选择边使得生成树的权值最小?贪心算法可以按照边的权值从小到大排序,然后依次选择权值最小且不构成环的边,直至所有顶点都被连接。
四、贪心算法的优缺点1. 优点:贪心算法简单高效,适用于一些特定类型的问题,能够在较短的时间内得到近似最优解。
2. 缺点:贪心算法不能保证一定能够得到全局最优解,可能会出现局部最优解不是全局最优解的情况。
贪心算法(陈鹏)

— 20 —
江苏省青少年信息学奥林匹克竞赛委员会 | 版权所有
© Copyright JSOI 2010
JSOI2010江苏省青少年信息学奥林匹克集训队(夏令营)
2、贪心算法的特点
[贪心算法解题的一般步骤] 1、设计数据找规律 2、进行贪心猜想 3、正确性证明(严格证明和一般证明) ·严格证明:数学归纳和反证法 ·一般证明:列举反例 4、程序实现
— 12 —
江苏省青少年信息学奥林匹克竞赛委员会 | 版权所有
© Copyright JSOI 2010
JSOI201——纪念品分组(NOIP2007普及组)
[输入输出样例] 输入: 输出: 100 6 9 90 20 20 30 50 60 70 80 90
若无法证明, 此步骤可缺省
— 21 —
江苏省青少年信息学奥林匹克竞赛委员会 | 版权所有
© Copyright JSOI 2010
JSOI2010江苏省青少年信息学奥林匹克集训队(夏令营)
2、贪心算法的特点
[典型的贪心算法简介] 贪心策略在树和图论中有着极其重要的应用,Prim、 Kruskal、Huffman等体现“贪心”思想的算法更是广泛地 应用于树与图的处理。 下面介绍一种利用“贪心”思想的算法——哈夫曼 (Huffman)树。
—7—
江苏省青少年信息学奥林匹克竞赛委员会 | 版权所有
© Copyright JSOI 2010
JSOI2010江苏省青少年信息学奥林匹克集训队(夏令营)
1、贪心概念
[求解这类问题的方法] 1、搜索 最原始的方法是搜索(穷举)法。当然,为了尽快搜 索出解,我们往往会利用限制条件进行可行性判断剪枝, 或利用目标函数的上界(或下界)进行分枝定界。 2、动态规划 第二种解决此类问题的方法是动态规划。当然,使用 动态规划必须要满足一些条件,如无后效性和最优子结构 等等。
贪心算法模板

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。
贪心算法并不总是得到问题的最优解,但对许多问题它能产生整体最优解或整体最优解的近似解。
下面是一个简单的贪心算法模板,用于解决一些优化问题:pythondef greedy_algorithm(input_data):# 初始化结果变量result = []# 根据输入数据的特性进行排序或预处理sorted_data = sort_or_preprocess(input_data)# 遍历排序后的数据for item in sorted_data:# 检查是否满足某个条件,例如是否可以选择该元素if can_choose(item, result):# 如果满足条件,则选择该元素并更新结果result.append(item)# 可能还需要执行一些额外的操作,例如更新状态或计数器update_state(result, item)return result# 根据具体问题的需要,实现排序或预处理函数def sort_or_preprocess(input_data):# 对输入数据进行排序或预处理pass# 根据具体问题的需要,实现选择条件函数def can_choose(item, result):# 检查是否可以选择该元素pass# 根据具体问题的需要,实现状态更新函数def update_state(result, item):# 更新状态或计数器pass请注意,这只是一个通用的贪心算法模板,具体实现会根据问题的不同而有所变化。
在实际应用中,你需要根据问题的特点来设计合适的排序、选择和状态更新策略。
同时,也需要验证贪心策略是否能够得到全局最优解,或者是否能够得到满意的近似解。
1。
第三章名词解释

第三章名词解释1.最小化(minimize)指DFA M状态数的最小化,是指构造一个等价的DFA M',而后者有最小的状态。
2.标示符(IDentifier)是指用来标识某个实体的一个符号。
在不同的应用环境下有不同的含义。
3.正规表达式(regular expression)是说明单词的模式(pattern)的一种重要的表示法(记号),是定义正规集的工具。
4.正规式(Normal form)正规式也称正则表达式,也是表示正规集的数学工具。
5.正规集(Normal set)如果把每类单词视作一种语言,那么每一类单词的全体单词组成了相应的正规集。
6. 有限状态自动机(finite state automaton)有限状态自动机拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的迁移。
有限状态自动机可以表示为一个有向图。
有限状态自动机是自动机理论的研究对象。
7.词法分析器(Lexical analyzer)词法分析是指将我们编写的文本代码流解析为一个一个的记号,分析得到的记号以供后续语法分析使用。
8.确定的有限自动机(DFA: Deterministic Finite Automata)自动机的每个状态都有对字母表中所有符号的转移。
9.五元式(Five element type)由五个要素组成的式子K:由有限个状态组成的集合∑:由有限个输入字符组成的字母表f:从K到∑的单值映射,q),(,指明当前态为p,输入字符a,下一个状态为qf=pas:一个属于K的特定状态,称之为初始状态Z:若干个属于K的特定状态,它们组成的集合称之为终态集,记为Z。
10.非确定的有限自动机(NFA:Non deterministic finite automaton)自动机的状态对字母表中的每个符号可以有也可以没有转移,对一个符号甚至可以有多个转移。
自动机接受一个字,如果存在至少一个从q0 到 F 中标记(label)著这个输入字的一个状态的路径。
贪 心 算 法

贪心算法及几个常用的例题贪心算法:一、基本概念:所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。
也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。
贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。
必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。
所以对所采用的贪心策略一定要仔细分析其是否满足无后效性。
二、贪心算法的基本思路:1.建立数学模型来描述问题。
2.把求解的问题分成若干个子问题。
3.对每一子问题求解,得到子问题的局部最优解。
4.把子问题的解局部最优解合成原来解问题的一个解。
三、贪心算法适用的问题贪心策略适用的前提是:局部最优策略能导致产生全局最优解。
实际上,贪心算法适用的情况很少。
一般,对一个问题分析是否适用于贪心算法,可以先选择该问题下的几个实际数据进行分析,就可做出判断。
四、贪心算法的实现框架从问题的某一初始解出发;while (能朝给定总目标前进一步)利用可行的决策,求出可行解的一个解元素;由所有解元素组合成问题的一个可行解;五、贪心策略的选择因为用贪心算法只能通过解局部最优解的策略来达到全局最优解,因此,一定要注意判断问题是否适合采用贪心算法策略,找到的解是否一定是问题的最优解。
几个经典的例子:一、定义什么是贪心算法呢?所谓贪心算法是指,在对问题求解时,总是做出在当前看来最好的选择。
也就是说,不从整体最优解出发来考虑,它所做出的仅是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题都能产生整体最优解或整体最优解的近似解。
贪心算法的基本思路如下:1. .建立数学模型来描述问题。
2. 把求解的问题分成若干个子问题。
3. 对每个子问题求解,得到每个子问题的局部最优解。
4. 把每个子问题的局部最优解合成为原来问题的一个解。
算法设计课程设计零钱问题

算法设计课程设计零钱问题一、课程目标知识目标:1. 学生能理解零钱问题的实际背景,掌握其转化为算法问题的方法。
2. 学生能够掌握贪心算法的基本概念及其在零钱问题中的应用。
3. 学生能够运用所学算法,解决至少三种不同组合的零钱问题,并能够解释算法的执行过程。
技能目标:1. 学生通过分析零钱问题,培养将实际问题抽象为算法问题的能力。
2. 学生能够编写简单的程序代码,实现零钱问题的算法解决方案。
3. 学生通过小组合作,提高沟通协作能力,共同完成算法的设计与优化。
情感态度价值观目标:1. 学生在解决零钱问题的过程中,培养对算法设计的兴趣,增强学习算法的自信心。
2. 学生通过探讨算法的优劣,形成批判性思维,学会从多角度分析问题。
3. 学生能够认识到算法在生活中的广泛应用,认识到学习算法的重要性,树立正确的价值观。
课程性质:本课程为零钱问题的算法设计,以实践操作和小组合作为主要教学方式,注重培养学生的实际操作能力和团队协作精神。
学生特点:学生处于能够理解基本算法概念,具备一定编程基础,对实际应用问题充满好奇的阶段。
教学要求:教师需引导学生通过实际案例导入课程,激发学生的学习兴趣,以任务驱动法组织教学,注重学生个体差异,提供个性化指导。
在教学过程中,关注学生的学习成果,及时给予反馈,确保课程目标的达成。
二、教学内容本课程以零钱问题为载体,结合以下教学内容,确保学生掌握算法设计的基本原理和方法。
1. 算法概述:- 算法的基本概念及分类- 算法的效率分析:时间复杂度和空间复杂度2. 贪心算法:- 贪心算法的定义及特点- 贪心算法在零钱问题中的应用3. 零钱问题算法设计:- 零钱问题的实际背景和数学模型- 贪心算法解决零钱问题的步骤和方法- 举例分析:至少三种不同组合的零钱问题4. 编程实践:- 编程环境与工具介绍- 编写代码实现贪心算法解决零钱问题- 小组合作:讨论、优化算法,提高解决问题的效率5. 教学进度安排:- 第一课时:算法概述、贪心算法基本概念- 第二课时:零钱问题背景、数学模型及贪心算法应用- 第三课时:编程实践、小组合作探讨优化算法- 第四课时:成果展示、评价与反馈教学内容关联教材章节:第三章 算法设计与分析,第三节 贪心算法及其应用。
贪心算法PPT课件

安排方案
f1
B
安排方案
fk
B’
…… 共j个活动
可能 相同 不存在
……
可能
如果 B’包 含这 个活, 则B 一定 包含
9
(2) 时间复杂度分析: 因为排序过程可以在O(nlogn)时间内完成,而求最优活动子 集的过程只需O(n)次比较,因此这个算法的时间复杂度为 O(nlogn)。 (3) 贪心策略设计算法的一般特点
·选Si最小的,这样可以增大场地的利用率; ·选fi最小的,使得下一个活动可以更早开始。
由于活动的占用时间长度没有限制,因此后一选择更合理。
6
为了在每一次选择时取当前可以安排的活动中最早结束的活动,应首先把 n项活动按结束时间的先后进行升序排序。即,使f1≤f2≤…≤fn,然后在Si值 不小于当前时刻的活动中取fi值最小者。 算法:
·算法的设计比较简单; ·算法一般比较快速; ·算法的正确性一般不明显,需要论证;如果正确性不能保 证,那么它往往可以得到近似最优解。
10
5.2 背包(Knapsack)问题
1. 问题描述
已知:n个(应为n种)物体{1,2,…,n}与一个背包。物体i的重量 (或体积)为Wi>0,价值为Pi>0(i=1,2,…,n),背包容量为 M>0。
计算机算法 ——设计与分析导论
刘璟
1
Chapter 5. 贪心(Greedy)技术
❖ 5.1 贪心策略的思想 ❖ 5.2 背包(Knapsack)问题 ❖ 5.3 Huffman编码 ❖ 5.4 多机调度问题的近似解法 ❖ 5.5 单源最短路径的Dijkstra算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2021/2/22
5
如果问题改成:砝码的种类分别为11克、5克和1克, 待称的物体是15克。用贪婪算法应先选一个11克的,然 后选四个1克的,共用五个砝码。这不是最优结果,只 要用三个5克的砝码就够了。
贪婪算法虽不能保证得到最优结果,但对于一些除
了“穷举”方法外没有有效算法的问题,用贪婪算法往
往能很快地得出较好的结果,如果此较好结果与最优结 果相差不是很多的话,此方法还是很实用的。
2021/2/22
9
当n不太大时,适当的取k值,此改进方法常常可以得到 最优解,但不能因此就说一般背包问题有多项式算法。 当n增大时,k不能随着n不断的加大,如k随n增大而同 时加大,其复杂性就是指数型而不是多项式型的了,而 如k取值较小,又不能保证得出最优解。
2021/2/22
10
例3.巡回推销员问题
(下标中5出现了3次,顶点5有三条边相连,d45(6)放弃) d24(1)+d13(2)+d15(2)+d25(3)+[d35(9)];
(下标中5出现了3次,顶点5有三条边相连,d35(9)放弃) d24(1)+d13(2)+d15(2)+d25(3)+d34(9)。
得到一条回路:
v1→v3→v4→v2→v5→v1
同由分枝限解方法得到的路径相同,因此是最佳 的回路。
2021/2/22
13
例4 设有六个城市,其坐标分别为a(0,0), b:(4,3), c:(1,7), d:(15,7), e(15,4), f:(18,0)。如下图所示:
2021/2/22
14
6座城市间的距离矩阵为:
5 7.07 16.55 15.52 18
(1)使任一城市的度数(连线数)超过2的连线必须 舍弃;
(2)在得到经过所有点的回路前就形成小回路的连 线必须舍弃。
距离按从小到大的次序排列:
Dde(3),
Def(5), Dbe(11.01), Dbf(14.32), Dad(16.55),
Dab(5),
Dbc(5),
Dac(7.07), Ddf(7.62),
当n>m时,我们首先将n个作业依其所需的处理时间 从大到小排序。然后依此顺序将作业分配给空闲的处理 机。
2021/2/22
21
例如,设7个独立作业{1,2,3,4,5,6,7}由3台机器 M1,M2,和M3来加工处理。各作业所需的处理时间分别为 {2,14,4,16,6,5,3}。按贪婪算法产生的作业调度如图4-13 所示,所需的加工时间为17。
5
5 11.7 11.01 14.32
7.07 5 D16.55 11.7 14
14 14.32 18.38
3 7.62
15.52 11.01 14.32 3 5
18 14.32 18.38 7.62 5
2021/2/22
15
用贪婪算法,先将任两城市间的连线距离按从小到 大的次序排列,然后从中逐个选择。但有两种情况的 连线应舍弃:
多机调度问题要求给出一种作业调度方案,使所 给的n个作业在尽可能短的时间内由m台机器加工处 理完成。
2021/2/22
20
这个问题是一个NP完全问题,到目前为止还没有一个 有效的解法。对于这一类问题,用贪婪选择策略有时可 以设计出较好的近似算法。采用最长处理时间作业优先 的贪婪选择策略可以设计出解多机调度问题的较好的近 似算法。按此策略,当n≤m时,我们只要将机器i的[0,ti] 时间区间分配给作业i即可。
2021/2/22
17
最后得到的回路如图(a)的结果,总长度为50。
2021/2/22
18
不过,这不是此问题的最优解,此问题的最优解为下图 所示的路径(可以用分枝限界等方法求得),总长度为 48.39。用贪婪方法得到的结果同最优解相比只多了3.3%。
2021/2/22
19
例5: 多机调度问题
设有n个独立的作业{1,2,…,n},由m台相同的 机器进行加工处理。作业i所需的处理时间为ti。现 约定,任何作业可以在任何一台机器上加工处理, 但未完工前不允许中断处理。任何作业不能拆分成 更小的子作业。
网络的最小生成树在实际中有广泛应用。例如,在设计 通信网络时,用图的顶点表示城市,用边(v,w)的权c[v][w] 表示建立城市v和城市w之间的通信线路所需的费用,则最 小生成树就给出了建立通信网络的最经济的方案。
2021/2/22
23
Kruskal最小生成树算法
Kruskal 在1956年提出了1个最小生成树算法, 它的思路很容易理解。设G=(V,E)是一个连通带权 图,V={1,2,…,n}。将图中的边按其权值由小到大 排序,然后作如下的贪婪选择,由小到大顺序选取 各条边,若选某边后不形成回路,则将其保留作为 树的一条边;若选某边后形成回路,则将其舍弃, 以后也不再考虑。如此依次进行,到选够(n-1) 条边即得到最小生成树。
2021/2/22
7
C
如果对上述算法作一些改进,可得到更好的结果。先从 n个物体中试着取j个总体积不超过C的装入背包,剩下 的(n-j)个物体则利用贪婪算法尽量往里装。此j值从零 开始逐渐增加,反复进行试探,直至j达到某预先给定 的常数k(0<k<n),最后从这些结果中取其最好的一个。 如果在试探中能得到一个完全装满的方案,则此过程就 可提前结束。因为从n个物体中取出j个共有 C n种j 方案, 此值随着j的增加而增加较快,但可以证明此改进算法 的复杂性为O(knk+1),因k是常数,故仍为多项式界的 算法。
第三章 贪心算法
2021/2/22
1
算法设计与分析
——贪婪算法
2021/2/22
2
贪婪算法(greedy algorithms,也叫登山法)
我们来看一个找硬币的例子。假设有四种硬币, 它们的面值分别为二角五分、一角、五分和一分。现 在要找给某顾客六角三分钱。这时,我们会不假思索 地拿出2个二角五分的硬币,1个一角的硬币和3个一 分的硬币交给顾客。这种找硬币方法与其他的找法相 比,所拿出的硬币个数是最少的。这里,我们下意识 地使用了这样的找硬币算法:首先选出一个面值不超 过六角三分的最大硬币,即二角五分;然后从六角三 分中减去二角五分,剩下三角八分;再选出一个面值 不超过三角八分的最大硬币,即又一个二角五分,如 此一直做下去。这个找硬币的方法实际上就是贪婪算 法。
d34=5 d23=5 d12=6 d35=6 d56=6
2021/2/22
26
Prim最小生成树算法
Prim在1957年提出另一种算法,这种算法特别适 用于边数相对较多,即比较接近于完全图的图。此算 法是按逐个将顶点连通的步骤进行的,它只需采用一 个顶点集合。这个集合开始时是空集,以后将已连通 的顶点陆续加入到集合中去,到全部顶点都加入到集 合中了,就得到所需的生成树。
设G=(V,E)是一个连通带权图,V={1,2,…,n}。构造 G的一棵最小生成树的Prim算法的过程是:首先从图 的任一顶点起进行,将它加入集合S中置,S={1},然 后作如下的贪婪选择,从与之相关联的边中选出权值 c[i][j]最小的一条作为生成树的一条边,此时满足条件 iS,jV-S,并将该j加入集合中,表示连两个顶点已 被所选出的边连通了。
Dbd(11.7), Dcd(14),
Dce(14.32), Dae(15.52),
Daf(18), Def(18.38)
2021/2/22
16
按贪婪算法原则,其选择过程如下:
Dde; Dde+Dab; Dde+Dab+Dbc; Dde+Dab+Dbc+Def;
Dde+Dab+Dbc+Def+[Dac];(形成小回路,舍弃)
当n>m时,因此算法所需的计算时间复杂度为O(nlogn)。
2021/2/22
22
例6: 最小生成树
一般情况下,用贪婪算法得到的是近似解,而不能保
证得到最优解。但用贪婪方法计算最小生成树,却可以设 计出保证得到最优解的算法。
设G=(V,E)是一个无向连通带权图,即一个网络。E中 每条边(v,w)的权为c[v][w]。如果G的一个子图G’是一棵包 含G的所有顶点的树,则称G’为G的生成树。生成树上各边 权的总和称为该生成树的费用。在G的所有生成树中,费用 最小的生成树称为G的最小生成树。
由于是5个城市,环绕一圈为5条边,贪婪方法 求解此问题的过程是从最小边开始,依此从小到大 取边加入到回路边集中,但在将1条边加入时不能使 1顶点的度数超过3,也不能形成小回路。