图的算法实现课程设计
- 格式:doc
- 大小:360.76 KB
- 文档页数:21
图像处理有关的课程设计一、教学目标本课程的学习目标主要包括知识目标、技能目标和情感态度价值观目标。
通过本课程的学习,学生将掌握图像处理的基本原理、方法和技巧,包括图像的表示、图像增强、图像滤波、边缘检测和图像分割等。
同时,学生将能够运用所学的知识解决实际问题,提高图像处理的实践能力。
此外,学生将培养对图像处理的兴趣和热情,增强创新意识和团队合作精神。
二、教学内容根据课程目标,本课程的教学内容主要包括图像处理的基本概念、图像的表示和运算、图像增强、图像滤波、边缘检测和图像分割等。
具体包括以下几个方面的内容:1.图像处理的基本概念:图像处理的目的、方法和应用领域。
2.图像的表示和运算:图像的数学模型、图像的像素运算和图像的坐标变换。
3.图像增强:图像增强的目的、方法和算法,包括直方图均衡化、对比度增强和锐化等。
4.图像滤波:图像滤波的目的、方法和算法,包括线性滤波、非线性滤波和高斯滤波等。
5.边缘检测:边缘检测的目的、方法和算法,包括Sobel算法、Canny算法和Prewitt算法等。
6.图像分割:图像分割的目的、方法和算法,包括阈值分割、区域增长和边缘追踪等。
三、教学方法为了实现课程目标,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
通过这些教学方法的综合运用,将激发学生的学习兴趣和主动性,提高学生的学习效果和实践能力。
1.讲授法:通过教师的讲解和演示,向学生传授图像处理的基本原理、方法和技巧。
2.讨论法:通过小组讨论和课堂讨论,引导学生主动思考和探索图像处理的问题和解决方案。
3.案例分析法:通过分析典型的图像处理案例,让学生了解图像处理在实际应用中的作用和效果。
4.实验法:通过实验操作和数据分析,培养学生动手能力和实际解决问题的能力。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备适当的教学资源。
教学资源包括教材、参考书、多媒体资料和实验设备等。
数据结构课程设计设计题目:图极点间最短路径算法专业:运算机科学与技术班级:04姓名:学号:0411指导老师:完成时间:2009-5-9—:需求分析:1.问题描述:路径问题在图论中占有重要位置,因为这与日常生活中的许多问题有着普遍的联系。
比如乘汽车旅行时,咱们总希望找岀到目的地尽可能短的线路:若是在地图上标出每两个路口之间的距离,如何找出一条最短的行车线路?在那个例子中咱们能够把地图模型化为一个图,结点表示一段公路的起点和终点,边的权值表示公路的长度。
咱们的目标是从起点动身找岀一条抵达目的地的最短路径。
一种直接的方式就是列举岀所有的路径,并计算岀每条路径的长度,然后选择最短的一条。
容易看出,即便不考虑包括回路的路径,在起点和终点之间仍然可能存在很多不同的行车线路,而其中绝大多数是没必要考虑的。
二:概要设计1.设计思想:I Dijkstra算法的大体思想:这种算法是解决有向图的最短路径问题的条件是该图所有边的权值是非负值oDijkstra算法槪念了一结点集合,从源结点到集合是任一点的最短路径的权值均已肯泄。
算法反复地从集合中挑选出其最短路径估量为最小的结点,并将最小结点插入集合,并对和最小结点相邻的所有边进行松弛。
II Bellman-ford算法的大体思想:Floyd能在边的权值为负的情形下解决单源最短路径问题。
已知有向加权图G二(V, E),设其源结点为S,加权函数w: E-R,对该图运行FLOYD算法可返回一布尔值,表有图中是不是存在一个从源结点可达的权值为负的回路。
若是存在如此的回路,则算法返回FLASE,说明该问题无解。
若不存在如此的回路,算法将产生最短路径及其权值Floyd算法运用了松弛技术,对每一个结点veV并慢慢减小从源s到”的最短路径的权值的估量值〃W)直至达到实际的最短路径0-(5, V)-III Floyd算法大体思想:设带权图G二(V,E),有N个极点,图采用邻接矩阵作为存储结构。
算法设计课程设计问题一、教学目标本课程的教学目标是让学生掌握算法设计的基本概念和方法,培养学生的问题解决能力和创新思维能力。
具体包括以下三个方面的目标:1.知识目标:学生能够理解算法设计的基本概念,掌握常见的算法设计方法和技巧,了解算法分析的基本方法。
2.技能目标:学生能够运用算法设计方法解决实际问题,具备编写和调试算法代码的能力,能够进行算法性能分析和优化。
3.情感态度价值观目标:学生能够认识到算法设计在现代社会的重要性,培养对算法设计的兴趣和热情,树立正确的算法设计伦理观念。
二、教学内容本课程的教学内容主要包括算法设计的基本概念、常见的算法设计方法和技巧、算法分析的基本方法等。
具体安排如下:1.第一章:算法设计的基本概念,包括算法、输入、输出、有穷性、确定性等。
2.第二章:常见的算法设计方法,包括贪婪法、动态规划、分治法、回溯法等。
3.第三章:算法分析的基本方法,包括时间复杂度、空间复杂度、渐近符号等。
4.第四章:算法设计实例分析,包括排序算法、查找算法、图算法等。
三、教学方法为了实现本课程的教学目标,将采用多种教学方法相结合的方式进行教学。
具体包括以下几种方法:1.讲授法:通过讲解算法设计的基本概念和方法,使学生掌握算法的理论知识。
2.案例分析法:通过分析实际案例,使学生了解算法设计在实际问题中的应用。
3.实验法:通过编写和调试算法代码,培养学生的实际编程能力和算法设计技巧。
4.讨论法:通过分组讨论和课堂讨论,激发学生的创新思维和问题解决能力。
四、教学资源为了保证本课程的教学质量,将充分利用校内外教学资源。
具体包括以下几种资源:1.教材:选用国内外优秀的算法设计教材,作为学生学习的主要参考资料。
2.参考书:推荐学生阅读相关的算法设计参考书籍,丰富学生的知识体系。
3.多媒体资料:制作精美的课件和教学视频,提高课堂教学效果。
4.实验设备:提供充足的计算机设备,确保学生能够进行实验和实践。
五、教学评估本课程的评估方式将采用多元化的形式,以全面、客观、公正地评价学生的学习成果。
算法与数据结构课程设计报告系(院):计算机科学学院专业班级:教技1001姓名:李##学号: ******### 指导教师:***设计时间:2012.6.16 - 2012.6.24设计地点:4号楼2号机房目录一、设计方案 (1)二、实现过程以及代码 (2)三、测试 (20)四、结论和分析 (23)五、难点和收获 (23)一、 设计方案1.程序设计基本过程:拿到课程设计任务书,按照要求,需要设计有向图、有向网、无向图 、无向网四种图,以及邻接矩阵、邻接表两种数据存储结构,三层以上的显示菜单。
图的操作中又包含了有关线性表、栈和队列的基本操作。
由于显示菜单已给出,剩下的任务就是把函数写入其中。
2.程序流程图:预定义 定义结构体 定义变量 各种函数3.程序设计的原理:图的操作都是以两种存储结构为基础的:邻接矩阵存储结构和邻接表存储结构,如有向图,有向网,无向图,无向网的创建,其他的操作都是在四种图创建后才开始进行的。
所以,首先必须理解两种存储结构的定义。
图的邻接矩阵存储结构即图的数组表示法。
用两个数组分别存储数据元素(如顶点)的信息和数据元素之间的关系(如边或弧)的信息。
用邻接矩阵存储结构的图具有以下几点特征:(一):顶点数:vexnum ,边(弧)数:arcnum ,图的种类:kind ;(二):邻接矩阵:arcs(1顶点关系类型:adj 2相关信息:*info);(三):顶点向量(顶点名):vexs[];其优点是以二维数组表示有n 个顶点的图时,需存放n 个顶点的信息和n*n 条弧的信息存储量。
借助邻接矩阵容易判定任意两个顶点之间是否有边或弧相连,并容易求出各个顶点的度。
缺点是时间复杂度是O (n*n ),例如,构造一个具有n 个顶点和e 条边的无向网的时间复杂度为O (n*n+e*n )。
图的邻接表存储结构是图的一种链式存储结构。
对图中的每个顶点建立一个单链表,每个结点由三个域组成,邻接点域adjvex (弧尾在邻接表链表中的位序),链域nextarc (下一条弧),数据域info(权值)。
《图像处理》课程设计一、教学目标本课程的教学目标是让学生掌握图像处理的基本原理和常用方法,能够运用图像处理技术解决实际问题。
具体分为以下三个部分:1.知识目标:学生需要了解图像处理的基本概念、原理和常用算法,包括图像增强、滤波、边缘检测、形态学处理等。
2.技能目标:学生能够熟练使用图像处理软件(如MATLAB、OpenCV等),进行图像的基本操作和处理,并能独立完成一些图像处理项目。
3.情感态度价值观目标:学生通过本课程的学习,能够培养对图像处理技术的兴趣和热情,认识到图像处理在现实生活中的应用和价值,提高解决实际问题的能力。
二、教学内容根据课程目标,本课程的教学内容主要包括以下几个部分:1.图像处理的基本概念和原理:包括图像的表示、图像的采样和量化、图像的格式等。
2.图像增强:包括灰度增强、色彩增强、图像锐化、图像平滑等。
3.图像滤波:包括线性滤波、非线性滤波、频率域滤波等。
4.边缘检测:包括梯度算法、Canny算法、Sobel算法等。
5.形态学处理:包括形态学的基本运算、形态学的滤波、形态学的重建等。
6.图像处理软件的使用:学习并掌握MATLAB、OpenCV等图像处理软件的基本使用方法。
三、教学方法为了达到课程目标,本课程将采用以下几种教学方法:1.讲授法:通过教师的讲解,使学生掌握图像处理的基本概念和原理。
2.案例分析法:通过分析具体的图像处理案例,使学生了解图像处理技术的应用和效果。
3.实验法:通过上机实验,使学生熟练掌握图像处理软件的使用,并能够独立完成图像处理项目。
4.讨论法:通过分组讨论,引导学生思考和探索图像处理技术的新发展和新应用。
四、教学资源为了支持教学内容和教学方法的实施,本课程将采用以下教学资源:1.教材:《数字图像处理》,作者:冈萨雷斯。
2.参考书:《数字图像处理与应用》,作者:潘晓阳。
3.多媒体资料:包括教学PPT、图像处理软件的教程等。
4.实验设备:计算机、MATLAB软件、OpenCV库等。
基于matlab的图像处理课程设计一、课程目标知识目标:1. 学生能理解图像处理的基本概念,掌握图像的数字化表示方法。
2. 学生能掌握Matlab软件的基本操作,运用其图像处理工具箱进行图像的读取、显示和保存。
3. 学生能掌握图像处理的基本算法,如灰度变换、图像滤波、边缘检测等,并理解其原理。
技能目标:1. 学生能运用Matlab进行图像处理操作,解决实际问题。
2. 学生能通过编程实现图像处理算法,具备一定的程序调试和优化能力。
3. 学生能运用所学知识,结合实际问题,设计简单的图像处理程序。
情感态度价值观目标:1. 学生通过学习图像处理,培养对计算机视觉和人工智能领域的兴趣,激发创新意识。
2. 学生在课程实践中,培养团队协作精神,提高沟通与表达能力。
3. 学生能认识到图像处理技术在生活中的广泛应用,增强学以致用的意识。
分析课程性质、学生特点和教学要求,本课程目标旨在使学生在掌握基本图像处理知识的基础上,通过Matlab软件的实践操作,培养其编程能力和解决实际问题的能力。
同时,注重培养学生的团队协作和情感态度,使其在学习过程中获得成就感,激发学习兴趣。
课程目标将具体分解为学习成果,以便后续教学设计和评估。
二、教学内容1. 图像处理基础理论:- 数字图像概念及表示方法- 图像处理的基本操作:读取、显示、保存- 像素运算与邻域处理2. Matlab基础操作:- Matlab软件安装与界面介绍- 数据类型与基本运算- 矩阵运算与函数编写3. 图像处理算法:- 灰度变换与直方图处理- 图像滤波:低通滤波、高通滤波- 边缘检测:Sobel算子、Canny算子4. 实践项目:- 图像增强与去噪- 图像分割与特征提取- 目标检测与跟踪5. 教学大纲:- 第一周:图像处理基础理论,Matlab基础操作- 第二周:灰度变换与直方图处理,图像滤波- 第三周:边缘检测,实践项目一- 第四周:图像分割与特征提取,实践项目二- 第五周:目标检测与跟踪,课程总结与展示教学内容根据课程目标,结合教材章节进行选择和组织,确保科学性和系统性。
数据结构课程设计python一、课程目标知识目标:1. 理解数据结构的基本概念,掌握常用数据结构如列表、元组、字典和集合的特点及应用场景。
2. 学习并掌握栈和队列的操作原理及其在Python中的实现方法。
3. 掌握树和图的基本概念,了解二叉树、遍历算法及图的表示方法。
技能目标:1. 能够运用Python语言实现基本数据结构,并对其进行增、删、改、查等操作。
2. 能够利用栈和队列解决实际问题,如递归、函数调用栈、任务调度等。
3. 能够运用树和图解决实际问题,如查找算法、路径规划等。
情感态度价值观目标:1. 培养学生严谨的逻辑思维,提高分析问题和解决问题的能力。
2. 激发学生对数据结构和算法的兴趣,培养良好的编程习惯。
3. 引导学生认识到数据结构在实际应用中的重要性,增强学习热情和责任感。
课程性质:本课程为高年级数据结构课程,旨在使学生掌握Python语言实现数据结构的方法,提高编程能力和解决问题的能力。
学生特点:学生具备一定的Python编程基础,具有较强的逻辑思维能力,对数据结构有一定的了解。
教学要求:结合实际案例,采用任务驱动法,引导学生通过实践掌握数据结构的基本原理和应用方法。
注重培养学生的动手能力和团队协作精神,提高学生的综合素质。
通过本课程的学习,使学生能够具备独立设计和实现小型项目的能力。
二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用和分类,结合Python语言特点,分析各类数据结构在实际应用中的优势。
- 列表、元组、字典和集合的原理与应用- 栈与队列的操作原理及实现2. 线性表:讲解线性表的概念,重点掌握顺序表和链表的操作方法。
- 顺序表和链表的实现及操作- 线性表的查找和排序算法3. 树与二叉树:介绍树的基本概念,重点讲解二叉树的结构及其遍历算法。
- 树的基本概念和表示方法- 二叉树的性质、存储结构、遍历方法4. 图:讲解图的基本概念,掌握图的存储结构及遍历方法。
- 图的基本概念和表示方法- 图的遍历算法(深度优先搜索、广度优先搜索)- 最短路径和最小生成树算法5. 算法分析与设计:结合实例,分析算法性能,掌握基本的算法设计方法。
数字图像处理的课程设计一、课程目标知识目标:1. 理解数字图像处理的基本概念,掌握图像的数字化表示方法;2. 掌握图像处理的基本操作,如图像变换、滤波、增强和复原;3. 了解常见的图像分割和特征提取方法,并应用于实际问题;4. 掌握图像压缩的基本原理及常用算法。
技能目标:1. 能够运用图像处理软件进行基本的图像编辑和操作;2. 能够编写简单的数字图像处理程序,实现对图像的基本处理功能;3. 能够运用所学的图像处理方法解决实际问题,如图像去噪、图像增强等;4. 能够对图像进行有效的压缩,以适应不同的应用场景。
情感态度价值观目标:1. 培养学生对数字图像处理技术的兴趣和热情,激发其探索精神;2. 培养学生的团队合作意识,学会与他人共同解决问题;3. 增强学生的实际操作能力,使其认识到理论与实践相结合的重要性;4. 引导学生关注图像处理技术在日常生活和各领域的应用,提高其科技素养。
课程性质:本课程为高年级选修课程,旨在使学生掌握数字图像处理的基本原理和方法,培养其实际应用能力。
学生特点:学生具备一定的数学基础和编程能力,对图像处理有一定了解,但尚未深入学习。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,以实际应用为导向,提高学生的动手能力和创新能力。
通过本课程的学习,使学生能够达到上述课程目标,为未来进一步学习和研究打下坚实基础。
二、教学内容1. 数字图像基础:包括图像的数字化表示、图像质量评价、颜色模型等基本概念;- 教材章节:第1章 数字图像处理基础2. 图像增强:介绍直方图均衡化、图像平滑、锐化等增强方法;- 教材章节:第3章 图像增强3. 图像复原:涉及图像退化模型、逆滤波、维纳滤波等复原方法;- 教材章节:第4章 图像复原4. 图像分割与特征提取:包括阈值分割、边缘检测、区域生长等分割方法,以及特征点的提取和描述;- 教材章节:第5章 图像分割与特征提取5. 图像压缩:介绍图像压缩的基本原理,如JPEG、JPEG2000等压缩算法;- 教材章节:第6章 图像压缩6. 数字图像处理应用:分析图像处理在医学、遥感、计算机视觉等领域的应用案例;- 教材章节:第7章 数字图像处理应用教学进度安排:1. 数字图像基础(2学时)2. 图像增强(4学时)3. 图像复原(4学时)4. 图像分割与特征提取(6学时)5. 图像压缩(4学时)6. 数字图像处理应用(2学时)三、教学方法为提高教学效果,本课程将采用以下多样化的教学方法:1. 讲授法:教师通过系统的讲解,使学生掌握数字图像处理的基本概念、原理和方法。
数据结构与算法课程设计报告课程设计题目:图的算法实现专业班级:信息与计算科学1002班目录摘要 (1)1、引言 (1)2、需求分析 (1)3、概要设计 (2)4、详细设计 (4)5、程序设计 (10)6、运行结果 (18)7、总结体会 (19)摘要(题目): 图的算法实现实验内容图的算法实现问题描述:(1)将图的信息建立文件;(2)从文件读入图的信息,建立邻接矩阵和邻接表;(3)实现Prim、Kruskal、Dijkstra和拓扑排序算法。
关键字:邻接矩阵、Dijkstra和拓扑排序算法1.引言本次数据结构课程设计共完成图的存储结构的建立、Prim、Kruskal、Dijkstra 和拓扑排序算法等问题。
通过本次课程设计,可以巩固和加深对数据结构的理解,通过上机和程序调试,加深对课本知识的理解和熟练实践操作。
(1)通过本课程的学习,能够熟练掌握数据结构中图的几种基本操作;(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
使用语言:CPrim算法思想:从连通网N={V,E}中的某一顶点v0出发,选择与它关联的具有最小权值的边(v0,v),将其顶点加入到生成树的顶点集合V中。
以后每一步从一个顶点在V中,而另一个顶点不在V中的各条边中选择权值最小的边(u,v),把它的顶点加入到集合V中。
如此继续下去,直到网中的所有顶点都加入到生成树顶点集合V中为止。
拓扑排序算法思想:1、从有向图中选取一个没有前驱的顶点,并输出之;2、从有向图中删去此顶点以及所有以它为尾的弧;重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。
没有前驱-- 入度为零,删除顶点及以它为尾的弧-- 弧头顶点的入度减1。
2.需求分析1、通过键盘输入建立一个新的有向带权图,建立相应的文件;2、对建立的有向带权图进行处理,要求具有如下功能:(1)用邻接矩阵和邻接表的存储结构输出该有向带权图,并生成相应的输出结果;(2)用Prim、Kruskal算法实现对图的最小生成树的求解,并输出相应的输出结果;(3)用Dijkstra算法实现对图中从某个源点到其余各顶点的最短路径的求解,并输出相应的输出结果;(4)实现该图的拓扑排序算法。
《计算机算法设计与分析》课程设计用分治法解决快速排序问题及用动态规划法解决最优二叉搜索树问题及用回溯法解决图的着色问题一、课程设计目的:《计算机算法设计与分析》这门课程是一门实践性非常强的课程,要求我们能够将所学的算法应用到实际中,灵活解决实际问题。
通过这次课程设计,能够培养我们独立思考、综合分析与动手的能力,并能加深对课堂所学理论和概念的理解,可以训练我们算法设计的思维和培养算法的分析能力。
二、课程设计内容:1、分治法:(2)快速排序;2、动态规划:(4)最优二叉搜索树;3、回溯法:(2)图的着色。
三、概要设计:分治法—快速排序:分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。
递归地解这些子问题,然后将各个子问题的解合并得到原问题的解。
分治法的条件:(1) 该问题的规模缩小到一定的程度就可以容易地解决;(2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;(3) 利用该问题分解出的子问题的解可以合并为该问题的解;(4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。
抽象的讲,分治法有两个重要步骤:(1)将问题拆开;(2)将答案合并;动态规划—最优二叉搜索树:动态规划的基本思想是将问题分解为若干个小问题,解子问题,然后从子问题得到原问题的解。
设计动态规划法的步骤:(1)找出最优解的性质,并刻画其结构特征;(2)递归地定义最优值(写出动态规划方程);(3)以自底向上的方式计算出最优值;(4)根据计算最优值时得到的信息,构造一个最优解。
●回溯法—图的着色回溯法的基本思想是确定了解空间的组织结构后,回溯法就是从开始节点(根结点)出发,以深度优先的方式搜索整个解空间。
这个开始节点就成为一个活结点,同时也成为当前的扩展结点。
在当前的扩展结点处,搜索向纵深方向移至一个新结点。
这个新结点就成为一个新的或节点,并成为当前扩展结点。
数据结构与算法课程设计报告课程设计题目:图的算法实现专业班级:信息与计算科学1001班姓名:学号:设计室号:理学院机房设计时间: 2011-12-26 批阅时间:指导教师:成绩:图的算法实现目录一.设计内容二.功能设计流程三.详细设计四.调试五.总结六.参考文献七.附录源代码一、设计内容:1.实验内容图的算法实现(1)将图的信息建立文件;(2)从文件读入图的信息,建立邻接矩阵和邻接表;(3)实现Prim、Kruskal、Dijkstra序算法。
2.实现的任务:从文件中读入图的信息,建立图的邻接矩阵和邻接表,实现Prim、Kruskal、Dijkstra3.本系统涉及的知识点Prim、Kruskal、Dijkstra、邻接矩阵和邻接表存储。
4.功能要求1.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。
对程序其它部分也进行必要的注释。
2.对系统进行功能模块分析、画出总流程图和各模块流程图。
3.用户接口要求使用方便、简洁明了、美观大方、格式统一。
4.通过命令行相应选项能直接进入某个相应菜单选项的功能模块。
5.所有程序需调试通过。
二、功能设计流程:图的算法实现邻接矩阵邻接表Prim算法Kruskal算法Dijkstra算法开始辅助数组初始输出生成树的边并计算其权值 新顶点并入U 集后重新选择最小边:遍历点,若g.edges[k][j]!=0 &&g.edges[k][j]<closedge[j].lowcost ,则closedge[j].adjvex=g.n[k];closedge[j假真 j=1j< g.n假真当j!=k时,有下面赋值:closedge[j].adjvex=u;closedge[j].lowcost=g.edges[k][j];j++。
closedge[k].lowcost=0;k=LocateVex(u);i=2 k=minimu m(closedge); 输出生成树的边,并且遍历顶点数组g.n[]使closedge[k].adjvex==g.n[a]。
通过s=s+g.edges[a][k]计算最小生成树的长度。
i++。
closedge[k].lowcost=0;结束用prim算法的程序流程图2、程序无向图相关算法的基本功能本部分程序可以对图的相关信息:顶点、边以及顶点与边的指向关系建立无向图的邻接矩阵和邻接表。
三.详细设计3.11.文件保存函数模块(void getin_1())void getin_1()// 文件保存函数{int a,b,k,w,z;FILE *fp;if((fp=fopen("record_1.txt","w"))==NULL) /*打开文件,并判断打开是否正常*/{printf("不能打开文件\n"); /*没打开*/exit(0);}printf("请输入顶点数:\n");scanf("%d",&g.n);fprintf(fp,"%d\n",g.n);printf("请输入边数:\n");scanf("%d",&g.e);fprintf(fp,"%d\n",g.e);//初始化矩阵各元素值//读入边printf("请输入顶点信息:\n");//顶点的信息会出现在矩阵边界上。
fflush(stdin);//清空缓冲for (z=0;z<g.n;z++){scanf("%c",&g.vexs[z]);fprintf(fp,"%c\n",g.vexs[z]);}for(a=0;a<g.n;a++)for(b=0;b<g.n;b++)g.edges[a][b]=0;printf("\n");printf("请输入应的弧头a和弧尾b及弧上的权值w(皆为整数,,从0开始,格式为:a,b,w):\n");for(k=0;k<g.e;k++){scanf("%d %d %d",&a,&b,&w);fprintf(fp,"%d %d %d\n",a,b,w);g.edges[a][b]=w;g.edges[b][a]=w;}fclose(fp);}建立一个名为record_1.txt的文件保存数据,保存的数据包括顶点的个数、边的条数、顶点与边之间的关系2.文件载入模块(int getout_1())。
void getout_1()//文件载入函数{int i,a,b,w;FILE *fp;if((fp=fopen("record_1.txt","ab+"))==NULL){printf("不能打开文件\n");exit(0);}fscanf(fp,"%d\n",&g.n);fscanf(fp,"%d\n",&g.e);for(i=0;i<g.n;i++){fscanf(fp,"%c\n",&g.vexs[i]);}for (i=0;i<g.n;i++){fscanf(fp,"%d %d %d\n",&a,&b,&w);g.edges[a][b]=w;g.edges[b][a]=w;}}根据文件中保存的数据,从指定文件中按格式输入数据,并根据输入图的相关信息建立对应的无向图邻接矩阵。
3.邻接矩阵输出函数(void outmatrix();)void outmatrix()//邻接矩阵输出函数{int i,m,z;printf("所建立表的邻接矩阵为:\n");printf("\t");for(i=0;i<g.n;i++)printf("%c\t",g.vexs[i]);for(m=0;m<g.n;m++){printf("\n%c\t",g.vexs[m]);for(z=0;z<g.n;z++)printf("%d\t",g.edges[m][z]);}}将根据相关信息建立的邻接矩阵打印出显示在屏幕上。
4.Prim算法函数(void MiniSpanTree_PRIM(char u)))void MiniSpanTree_PRIM(char u){int i,j,k;minside closedge[9999];k=LocateVex(u);for(j=0;j<g.n;++j) //辅助数组初始化{if(j!=k){closedge[j].adjvex=u;closedge[j].lowcost=g.edges[k][j];}}closedge[k].lowcost=0; //初始,U={u}printf("\n用prim算法生成的最小生成树为:\n");for(i=1;i<g.n;++i) // 选择其余G.vexnum-1个顶点{k=minimum(closedge); // 求出T的下一个结点:第K顶点printf("(%c-%c)\n",closedge[k].adjvex,g.vexs[k]); 输出生成树的边closedge[k].lowcost=0; // 第K顶点并入U集for(j=0;j<g.n;++j)if(g.edges[k][j]!=0 && g.edges[k][j]<closedge[j].lowcost// 新顶点并入U集后重新选择最小边{closedge[j].adjvex=g.vexs[k];closedge[j].lowcost=g.edges[k][j];}}}根据输入图的相关信息建立邻接矩阵运用Prim算法得出最小生成树并将所得最小生成树的结果打印出显示在屏幕上。
5.迪杰斯特拉算法函数(void Dijkstra(int v))void Dijkstra(int v){int dist[N],path[N];int s[N];int mindis,i,j,u;for(i=0;i<g.n;i++){for(j=0;j<g.n;j++){if(g.edges[i][j]==0)g.edges[i][j]=9999;}}for(i=0;i<g.n;i++){dist[i]=g.edges[v][i];s[i]=0;if(g.edges[v][i]<9999)path[i]=v;elsepath[i]=-1;}s[v]=1;path[v]=0;for(i=0;i<g.n;i++){mindis=9999;for(j=0;j<g.n;j++){if(s[j]==0&&dist[j]<mindis){u=j;mindis=dist[j];}}s[u]=1;for(j=0;j<g.n;j++){if(s[j]==0){if(g.edges[u][j]<9999&&dist[u]+g.edges[u][j]<dist[j]&&dist[u]!=0){dist[j]=dist[u]+g.edges[u][j];path[j]=u;}}}}Dispath(dist,path,s,g.n,v);}根据输入图的相关信息建立邻接矩阵运用Dijkstra算法得出最短路径并将所得最短路径的结果打印出显示在屏幕上。
6.克鲁斯卡尔(void Kruskal(edgetype edges[],int n) )void Kruskal(edgetype edges[],int n){int front[100];int i,vf1,vf2;printf("用Kruskal算法生成的最小生成树为:\n");for(i=0;i<n;i++)front[i]=0;for(i=0;i<n-1;i++){vf1=Search(front,edges[i].w1);vf2=Search(front,edges[i].w2);if(vf1!=vf2){front[vf2]=vf1;printf("(%c-%c)\n",edges[i].w1,edges[i].w2);}}}3.2 数据结构的定义typedef struct{char vexs[N];int edges[N][N];int n,e; //顶点数和边数}MGraph; //定义图的节点结构体MGraph g;/ typedef struct{char adjvex;int lowcost;}minside;typedef int elemtype;typedef struct{elemtype w1; //边的一个顶点elemtype w2; //边的另一个顶点int Cost; //一条边的一个权值}edgetype //定义顶点及边的结构体四调试4.1菜单界面4.2数据保存成功界面4.3 prim算法现实最小生成树界面4.4 Dijkstra显示最短路径界面4.5用Kruskal生成最小生成树界面五总结通过这次的综合训练让我对所学的知识加深了印象,要想学好c语言要重在实践,要通过不断的上机操作才能更好地学习它尤其是对算法有更深的认识。