构造n个城市连接的最小生成树
- 格式:doc
- 大小:141.50 KB
- 文档页数:9
算法设计综合实训题目0.逆序数字(借助栈)编写一个函数,接收一个4位整数值,返回这个数中数字逆序后的结果值。
例如,给定数7631,函数返回1367.输入:第一行一个正整数T(T<=10),表示有T组测试数据; 以下T行,每行一个非负的整数N。
输出:共T行,对于每组输入数据输出一行,即数字逆序后的结果值。
样本输入:3763110185158样本输出:1367810185151.人见人爱A+B这个题目的A和B不是简单的整数,而是两个时间,A和B 都是由3个整数组成,分别表示时分秒,比如,假设A为34 45 56,就表示A所表示的时间是34小时 45分钟 56秒。
输入:输入数据有多行组成,首先是一个整数N,表示测试实例的个数,然后是N行数据,每行有6个整数AH,AM,AS,BH,BM,BS,分别表示时间A和B所对应的时分秒。
题目保证所有的数据合法。
输出:对于每个测试实例,输出A+B,每个输出结果也是由时分秒3部分组成,同时也要满足时间的规则(即:分和秒的取值范围在0-59),每个输出占一行,并且所有的部分都可以用32位整数表示。
样本输入:21 2 3 4 5 634 45 56 12 23 34样本输出:5 7 947 9 302.敲七【问题描述】输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...)【要求】【数据输入】一个整数N。
(N不大于30000)【数据输出】从小到大排列的不大于N的与7有关的数字,每行一个。
【样例输入】20【样例输出】714173.统计同成绩学生人数问题【问题描述】读入N名学生的成绩,将获得某一给定分数的学生人数输出。
【要求】【数据输入】测试输入包含若干测试用例,每个测试用例的格式为第1行:N第2行:N名学生的成绩,相邻两数字用一个空格间隔。
第3行:给定分数当读到N=0时输入结束。
其中N不超过1000,成绩分数为(包含)0到100之间的一个整数。
考研数据结构图的必背算法及知识点Prepared on 22 November 20201.最小生成树:无向连通图的所有生成树中有一棵边的权值总和最小的生成树问题背景:假设要在n个城市之间建立通信联络网,则连通n个城市只需要n—1条线路。
这时,自然会考虑这样一个问题,如何在最节省经费的前提下建立这个通信网。
在每两个城市之间都可以设置一条线路,相应地都要付出一定的经济代价。
n个城市之间,最多可能设置n(n-1)/2条线路,那么,如何在这些可能的线路中选择n-1条,以使总的耗费最少呢分析问题(建立模型):可以用连通网来表示n个城市以及n个城市间可能设置的通信线路,其中网的顶点表示城市,边表示两城市之间的线路,赋于边的权值表示相应的代价。
对于n个顶点的连通网可以建立许多不同的生成树,每一棵生成树都可以是一个通信网。
即无向连通图的生成树不是唯一的。
连通图的一次遍历所经过的边的集合及图中所有顶点的集合就构成了该图的一棵生成树,对连通图的不同遍历,就可能得到不同的生成树。
图G5无向连通图的生成树为(a)、(b)和(c)图所示:G5G5的三棵生成树:可以证明,对于有n个顶点的无向连通图,无论其生成树的形态如何,所有生成树中都有且仅有n-1条边。
最小生成树的定义:如果无向连通图是一个网,那么,它的所有生成树中必有一棵边的权值总和最小的生成树,我们称这棵生成树为最小生成树,简称为最小生成树。
最小生成树的性质:假设N=(V,{E})是个连通网,U是顶点集合V的一个非空子集,若(u,v)是个一条具有最小权值(代价)的边,其中,则必存在一棵包含边(u,v)的最小生成树。
解决方案:两种常用的构造最小生成树的算法:普里姆(Prim)和克鲁斯卡尔(Kruskal)。
他们都利用了最小生成树的性质1.普里姆(Prim)算法:有线到点,适合边稠密。
时间复杂度O(N^2)假设G=(V,E)为连通图,其中V为网图中所有顶点的集合,E为网图中所有带权边的集合。
八年级数学上册 13.4 课题学习最短路径问题说课稿(新版)新人教版一. 教材分析八年级数学上册13.4课题学习“最短路径问题”是新人教版教材中的一项重要内容。
这一节内容是在学生掌握了平面直角坐标系、一次函数、几何图形的性质等知识的基础上进行学习的。
本节课的主要内容是最短路径问题的研究,通过实例引导学生了解最短路径问题的背景和意义,学会利用图论知识解决实际问题。
教材中给出了两个实例:光纤敷设和城市道路规划,让学生通过解决这两个实例来理解和掌握最短路径问题的求解方法。
二. 学情分析八年级的学生已经具备了一定的数学基础,对于平面直角坐标系、一次函数等知识有了一定的了解。
但是,对于图论知识以及如何利用图论解决实际问题还比较陌生。
因此,在教学过程中,我需要引导学生理解和掌握图论知识,并能够将其应用到实际问题中。
三. 说教学目标1.知识与技能目标:让学生了解最短路径问题的背景和意义,掌握利用图论知识解决最短路径问题的方法。
2.过程与方法目标:通过解决实际问题,培养学生运用数学知识解决实际问题的能力。
3.情感态度与价值观目标:培养学生对数学的兴趣,让学生体验到数学在实际生活中的应用价值。
四. 说教学重难点1.教学重点:最短路径问题的求解方法。
2.教学难点:如何将实际问题转化为图论问题,并利用图论知识解决。
五. 说教学方法与手段1.教学方法:采用问题驱动法,引导学生通过解决实际问题来学习和掌握最短路径问题的求解方法。
2.教学手段:利用多媒体课件辅助教学,通过展示实例和动画效果,帮助学生更好地理解和掌握知识。
六. 说教学过程1.导入:通过展示光纤敷设和城市道路规划的实例,引导学生了解最短路径问题的背景和意义。
2.新课导入:介绍图论中最短路径的概念和相关的数学知识。
3.实例分析:分析光纤敷设和城市道路规划两个实例,引导学生将其转化为图论问题。
4.方法讲解:讲解如何利用图论知识解决最短路径问题,包括迪杰斯特拉算法和贝尔曼-福特算法等。
榆林学院12届课程设计《最小生成树问题》课程设计说明书学生姓名:赵佳学号:1412210112院系:信息工程学院专业:计算机科学与技术班级:计14本1指导教师:答辩时间:年月日最小生成树问题一、问题陈述最小生成树问题设计要求:在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。
存储结构采用多种。
求解算法多种。
二、需求分析1.在n个城市之间建设网络,只需保证连通即可。
2.求城市之间最经济的架设方法。
3.采用多种存储结构,求解算法也采用多种。
三、概要设计1、功能模块图2、功能描述(1)CreateUDG()创建一个图:通过给用户信息提示,让用户将城市信息及城市之间的联系关系和连接权值写入程序,并根据写入的数据创建成一个图。
(2)Switch()功能选择:给用户提示信息,让用户选择相应功能。
(3)Adjacency_Matrix()建立邻接矩阵:将用户输入的数据整理成邻接矩阵并显现在屏幕上。
(4)Adjacency_List()建立邻接表:将用户输入的数据整理成临接表并显现在屏幕上。
(5)MiniSpanTree_KRSL()kruskal算法:利用kruskal算法求出图的最小生成树,即:城市之间最经济的连接方案。
(6)MiniSpanTree_PRIM()PRIM算法:利用PRIM算法求出图的最小生成树,即:城市之间最经济的连接方案。
四、详细设计本次课程设计采用两种存储结构以及两种求解算法。
1、两种存储结构的存储定义如下:typedef struct Arcell{double adj;}Arcell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct{char vexs[MAX_VERTEX_NUM]; //节点数组AdjMatrix arcs; //邻接矩阵int vexnum,arcnum; //图的当前节点数和弧数}MGraph;typedef struct Pnode //用于普利姆算法{ char adjvex; //节点double lowcost; //权值}Pnode,Closedge[MAX_VERTEX_NUM];//记录顶点集U到V-U的代价最小的边的辅助数组定义typedef struct Knode//用于克鲁斯卡尔算法中存储一条边及其对应的2个节点{char ch1; //节点1char ch2; //节点2double value;//权值}Knode,Dgevalue[MAX_VERTEX_NUM];2、求解算法采用Prim算法和Kruskal算法。
空间数据分析方法空间数据分析方法导语:空间数据分析的方法有什么呢?以下是小编为大家分享的空间数据分析方法,欢迎借鉴!空间数据分析1. 空间分析:(spatial analysis,SA)是基于地理对性的位置和形态特征的空间数据分析技术,其目的在于提取和传输空间信息,是地理信息系统的主要特征,同时也是评价一个地理信息系统功能的主要指标之一,是各类综合性地学分析模型的基础,为人们建立复杂的空间应用模型提供了基本方法.2. 空间分析研究对象:空间目标。
空间目标基本特征:空间位置、分布、形态、空间关系(度量、方位、拓扑)等。
3. 空间分析根本目标:建立有效地空间数据模型来表达地理实体的时空特性,发展面向应用的时空分析模拟方法,以数字化方式动态的、全局的描述的地理实体和地理现象的空间分布关系,从而反映地理实体的内在规律和变化趋势。
GIS空间分析实际是一种对GIS海量地球空间数据的增值操作。
4. ArcGIS9中主要的三种数据组织方式:shapefile,coverage和geodatabase。
Shapefile由存储空间数据的dBase表和存储属性数据和存储空间数据与属性数据关系的.shx文件组成。
Coverage的空间数据存储在INFO表中,目标合并了二进制文件和INFO表,成为Coverage要素类。
5. Geodatabase是面向对象的数据模型,能够表示要素的自然行为和要素之间的关系。
6. GIS空间分析的基本原理与方法:根据空间对象的不同特征可以运用不同的空间分析方法,其核心是根据描述空间对象的空间数据分析其位置、属性、运动变化规律以及周围其他对象的相关制约,相互影响关系。
方法主要有矢量数据的空间分析,栅格数据的空间分析,空间数据的量算与空间内插,三维空间分析,空间统计分析。
7. 栅格数据在数据处理与分析中通常使用线性代数的二维数字矩阵分析法作为数据分析的数学基础。
栅格数据的处理方法有:栅格数据的聚类、聚合分析,复合分析,追踪分析,窗口分析。
一、Josephu 问题Josephu 问题为:设编号为1,2,…n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。
提示:用一个不带头结点的循环链表来处理Josephu 问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除算法结束。
二、稀疏矩阵的操作基本功能要求:稀疏矩阵采用三元组表示,求两个具有相同行列数的稀疏矩阵A和B的相加矩阵C,并输出C,求出A的转置矩阵D,输出D。
三、背包问题的求解:假设有一个能装入总体积为T的背包和n件体积分别为w1 , w2 , …, wn 的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1 +w2 + …+ wn=T,要求找出所有满足上述条件的解。
例如:当T=10,各件物品的体积{1,8,4,3,5,2}时,可找到下列4组解:(1,4,3,2)(1,4,5)(8,2)(3,5,2)。
提示:可利用回溯法的设计思想来解决背包问题。
首先将物品排成一列,然后顺序选取物品装入背包,假设已选取了前i 件物品之后背包还没有装满,则继续选取第i+1件物品,若该件物品"太大"不能装入,则弃之而继续选取下一件,直至背包装满为止。
但如果在剩余的物品中找不到合适的物品以填满背包,则说明"刚刚"装入背包的那件物品"不合适",应将它取出"弃之一边",继续再从"它之后"的物品中选取,如此重复,,直至求得满足条件的解,或者无解。
由于回溯求解的规则规则是"后进先出"因此自然要用到栈。
四、n皇后问题问题描述:求出在一个n×n的棋盘上,放置n个不能互相捕捉的国际象棋"皇后"的所有布局要求:试编写程序实现将n个皇后放置在国际象棋棋盘的无冲突的位置上的算法,并给出所有的解。
收稿日期:2008-06-02作者简介:董跃华(1964-),女,高级实验师.第29卷第4期Vol.29,No.42008年8月Aug.2008江西理工大学学报JOURNALOFJIANGXIUNIVERSITYOFSCIENCEANDTECHNOLOGY0引言假设要在n个城市之间建立通信联络网,则连通n个城市只需要n-1条线路.这时,自然会考虑这样一个问题,如何在最节省经费的前提下建立这个通信网.例如:在一个城市中电信公司要给几个住宅区铺设网线,如图1所示.图1中,A表示电信公司,B,C,D,E表示各个住宅区,必须沿着图中所示的线路铺设,每条线上的数字表示铺设网线的费用,怎样铺设网线使总造价(费用)最小,因为这个图是一个带权连通图,所以求最小费用的问题转化成为该图寻找最小生成树的问题.现在,我们要选择这样一棵生成树,也就是使总的耗费最少.这个问题就是构造连通网的最小代价生成树(minimumcostspanningtree)(简称为最小生成树)的问题,一棵生成树的代价就是树上各边的代价之和.最小生成树的构造准则:①必须只使用该网络中的边来构造最小生成树;②必须使用且仅使用n-1条边来连接网络中的n个顶点;③不能使用产生回路的边.最小生成树问题的解法主要有两种:普里姆(Prim)算法和Kruskal算法.这两种算法是按权值递增的顺序构造连通网的最小生成树.文中利用破圈法对Prim算法的思想进行了分析并设计了该算法的程序代码.1用破圈法实现普里姆算法的基本思想很多的教材中利用Prim算法构造最小生成树时均采用:从连通网络G=(V,E)的某一顶点出发,选择与它关联的具有最小权值的边(u0,V),将其顶点加入到生成树的顶点集合u中.以后每一步从一个顶点在文章编号:1007-1229(2008)04-0020-03用破圈法实现普里姆算法董跃华,李云浩,姜在东(江西理工大学信息工程学院,江西赣州341000)摘要:介绍了最小生成树的Prim算法中的破圈法,指出如何在计算机上实现普里姆算法,并分析所设计算法的时间复杂度.关键词:数据结构;最小生成树;Prim算法;破圈法中图分类号:TP301.6文献标识码:ARealizePrimAlgorithmwiththeBreakingCircleWayDONGYue-hua,LIYun-hao,JIANGZai-dong(FacultyofInformationEngincering,JiangxiUniversityofScienceandTechnology,Ganzhou341000,China)Abstract:ThearticleintroducesthebreakingcirclewayofthePrimalgorithmofminimalspamangtree,andpointsouthowtorealizePrimalgorithminthecomputer,andanalysesitsminimumSpanningtimecomplexityofthedesigningalgorithm.Keywords:datastructure;minimumspanningtree;Primalgorithm;breakingcirclewayu中,而另一个顶点不在u中的各条边中选择权值最小的边(u,V),把它的顶点加入到集合u中,如此下去直到网络中的所有顶点都加入到生成树顶点集合u中为止,这时就可构造一棵最小生成树.但学生对两栖边以及最小两栖边的选择过程总是存在一定的障碍,教学效果不甚理想,如果我们在遵循Prim算法的同时进行一下反向思考,问题一下就变得简单明了.由于Prim算法是每次在连通图中选择一条权值最小的边{最小两栖边),现在我们可以反过来每次从连通图中去掉一条权值最大的边,这样到最后当然只余下权值最小的边了,我们姑且将这种方法叫做破圈法.其基本思想如下:(1)每次从图中选取任意一个圈,然后去掉该圈中权值最大的边(如果存在多条相同权值的最大边,可以任意选择一条去掉即可)使之不构成圈.(2)重复上述过程.直到图中不再含圈且所有顶点均包含在图中为止,就构成最小生成树.2破圈法实现的过程根据破圈法实现Prim算法的基本思想,我们可以很容易地找到一个圈.同时去掉其中的最大边,以破除该圈,从而不再构成回路.当整个图中不再有任何回路时,最小生成树的构造过程完成.例如给n个住宅区铺设网线,为使费用最小,产生具体的铺设线路过程见图2所示.董跃华等:用破圈法实现普里姆算法第29卷第4期21#include”stdio.h”#include<conio.h>#definen5inta[n][n];intflag,am,p,q;intmax,ptm,qtm;Voidinput(){inti,j;printf(”输入图的带权邻接矩阵:\n”);for(i=0;i<n;i++){for(j=0;j<n;j++)scanf(“%d”,&a[i][j]);}}Output(inta[n][n]){inti,j;for(i=0;i<n;i++){for(j=0;j<n;j++)printf(“%5d”,a[i][j]);intmax;max=0;for(i=0;i<n;i++){for(j=0;j<n;j++)if((a1[i][j]>max)&&(a1[i][j]<=am1)&&((i!=p1)||(j!=q1))){max=a[i][j];ptmi;qtm=j;}}am=max;p=ptm;q=qtm;a[p][q]=0;a[q][p]=0;}Wshall(intarray[n][n])printf(”\n”);}}Max(inta1[n][n],intarn1,intp1,intq1){inti,j,ptm,qtm;intr[n][n];intB[n][n];{for(j=0<n;j++){r[il[j]=0;B[i][j]=array[i][j];}}for(j=0<n++){for(i=0;i<n;i++)if(B[i][j]>=1)for(k=0;k<n;k++)B[i][j]=B[i][k]+B[j][k];}for(i=0;i<n;i++){forj=0;j<n;j++){r[i][j]=B[i][j];{if((r[i][j]>=1)||(i==j))m=m+l;}}}ifm==n*n)flag=1;elseflag=0;return(flag);}main(){inti,j,sm,wt=0;clrscr();am=10000,P=-1,q=-1;sm=0;input();{inti,j,k,m=0;intr[n][n],B[n][n];for(i=0;i<n;i++){for(i=0;i<n;i++)for(j=i;j<n;j++)if(a[i][j]>0)Sm=sm+l;)printf(”sm=%d\n”,sm);printf(”输出图的带权邻接矩阵:\n”);outpiut(a);while(sm>n-l){max(a,am,p,q);flag=Wshall(a);{if(flag==1)Sm=Sm-1;else{a[p][q]=am;a[q][p]=am;}}}for(i=0;i<n;i++)for(j=i;j<n;j++)wt=wt+a[il[j];printf(”输出最小生成树的带权邻接矩阵:\n”);output(a);printf(”最小生成树的树权是:%d\n”,wt);江西理工大学学报2008年8月3用C语言实现破圈法的Prim算法的代码该算法主要侧重于找边、删边的过程,通过这个方法求到的最小生成树和别的算法相比,主要是算法简单,结构清晰,在程序实现中只是用到了数组和循环语句的知识,程序简单明了.完整程序如下:显然采用这种思想来产生最小生成树,没有书本上那些抽象的概念和繁杂的过程,容易理解并接受,算法的思想突出一个“破”字,整个过程也就是不断地“找圈”与“破圈”.同时也可以证明这种算法的正确性和可行性.参考文献:[1]严蔚敏,吴伟民.数据结构[M].北京:清华大学出版社,1992.[2]张乃孝.算法与数据结构———C语言描述[M].北京:高等教育出版社,2002.[3]潘道才.数据结构[M].成都:成都电讯工程学院出版社,1988.22。
1.构造n个城市连接的最小生成树
一个地区的n个城市间的距离网,用Prim算法或Kruskal算法建立最小生成树,并计算得到的最小生成树的代价。
基本要求:
1) 城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。
要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。
2)表示城市间距离网的邻接矩阵(要求至少6个城市,10条边)
(1)代码:
#include<stdio、h>
#include<stdlib、h>
#define MaxVextexNum 30 /* 最大顶点数为30 */
#define INFINITY 32767 /* 定义一个权值的最大值*/
typedef struct{
int vexs[MaxVextexNum] ; /* 顶点表*/
int arcs[MaxVextexNum][MaxVextexNum] ; /* 邻接矩阵,即边表*/
int n ,e ; /* 顶点数与边数*/ }MGraph ; /* MGragh就是以邻接矩阵存储的图类型*/
typedef struct{
int adjvertex ; /* 某顶点与已构造好的部分生成树的顶点之间权值最小的顶点*/
int lowcost ; /* 某顶点与已构造好的部分生成树的顶点之间的最小权值*/ }ClosEdge[MaxVextexNum] ; /* 用prim算法求最小生成树时的辅助数组*/
void CreatGraph(MGraph *G) /* 建立有向图G的邻接矩阵存储*/
{
int i, j, k, w ;
printf("请输入顶点数与边数n e:") ;
scanf("%d%d" ,&(G->n) ,&(G->e)) ;/* 输入顶点数与边数*/
printf("\n请输顶点字符信息(共%d个):", G->n) ;
for (i=0 ;i<G->n ;i++)
{
scanf("%d" ,&(G->vexs[i])) ; /* 输入顶点信息,建立顶点表*/
}
for (i=0 ;i<G->n ;i++)
for (j=0 ;j<G->n ;j++)
{
if(i == j)
{
G->arcs[i][j] = 0 ;
}
else
G->arcs[i][j] = INFINITY ;
}/* 初始化邻接矩阵32767为无穷大*/
printf("\n请输入边<Vi,Vj>对应的顶点序号(共%d对),以及权值:\n",G->e) ; for (k=0 ;k<G->e ;k++)
{
scanf("%d%d%d" ,&i ,&j ,&w) ; /*输入e条边,建立邻接矩阵*/
G->arcs[i][j] = w ;/* 若加入G->edges[j][i]=1,则为无向图的邻接矩阵*/ G->arcs[j][i] = w ;
}
printf("此连邻接矩阵为(32767为无穷大):\n") ;
for(i=0 ;i<G->n ;i++)
{
for(j=0 ;j<G->n ;j++)
printf("%8d", G->arcs[i][j]) ;
printf("\n") ;
}
}
void MiniSpanTree_PRIM(MGraph G,int u,ClosEdge closedge)
{/* 从第u个顶点出发构造图G的最小生成树,最小生成树顶点信息存放在数组closedge中*/
int i ,j ,w ,k ,cost = 0 ;
for(i=0 ;i<G、n ;i++) /* 辅助数组初始化*/
if(i != u)
{
closedge[i]、adjvertex = u ;
closedge[i]、lowcost = G、arcs[u][i] ;
}
closedge[u]、lowcost = 0 ; /* 初始,U={u} */
for(i=0 ;i<G、n-1 ;i++) /* 选择其余的G、n-1个顶点*/
{
w=INFINITY ;
for(j=0 ;j<G、n ;j++) /* 在辅助数组closedge中选择权值最小的顶点*/
if(closedge[j]、lowcost!=0 && closedge[j]、lowcost<w)
{
w=closedge[j]、lowcost ;
k=j ;
} /* 求出生成树的下一个顶点k */
closedge[k]、lowcost=0 ; /* 第k顶点并入U集*/
for(j=0 ;j<G、n ;j++) /* 新顶点并入U后,修改辅助数组*/
if(G、arcs[k][j]<closedge[j]、lowcost)
{
closedge[j]、adjvertex=k ;
closedge[j]、lowcost=G、arcs[k][j] ;
}
}
printf("\n最小生成树中包括的城市间的道路:\n") ;
for(i=0; i<G、n;i++) /*打印最小生成树的各条边*/
if (i != u)
{
printf("%d->%d,%d\n", i ,closedge[i]、adjvertex ,G、arcs[i][closedge[i]、adjvertex]) ;
cost=cost+G、arcs[i][closedge[i]、adjvertex] ;
}
printf("\n最小生成树的代价为:%d\n\n", cost) ;
}
int main()
{
int t ;
MGraph G;
ClosEdge closedge ;
CreatGraph( &G ) ;
printf("请输入源点:") ;
scanf("%d", &t) ;
MiniSpanTree_PRIM(G ,t ,closedge) ;
return 1 ;
}
结果:
(2)各模块功能说明:
①CreatGraph:
,创建邻接矩阵,用邻接矩阵表示城市间的距离网,邻若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。
然后在屏幕上显示得到的最小生成树中包括了哪些城市间的道路
②MiniSpanTree_PRIM:
用Prim算法建立最小生成树,并计算得到的最小生成树的代价
③主函数:
调用各函数,并输出最后结果
3、总结:
在做课程设计的时候,我们要先搞清楚原理,再考虑如何去实现!
对于城市的最小生成树问题,让我认识到图能够在计算机中存在,首先要捕捉它有哪些具体化、数字化的信息,比如说权值、顶点个数等,这也就是说明了想要把生活中的信息转化成到计算机中必须用数字来完整的构成一个信息库,而图的存在,又涉及到了顶点与顶点之间的联系,图分为有向图与无向图,而无向图又就是有向图在权值双向相等下的一种特例。
这次课程设计让我认识到对于一段代码,我们不仅要考虑它的可行性,更应该考虑它的算法复杂度,运行效率。
做同一件事,一万个人有一万种做法,换而言之,一万个人写一段代码实现同一个功能可以得到一万段代码。
由此,我们可以瞧出做一件事要精益求精,多加斟酌。