欢迎来到天天文库
浏览记录
ID:57862111
大小:255.31 KB
页数:26页
时间:2020-04-01
《离散数学课程设计.图的矩阵表示及基本运算.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、离散数学实验三实验报告中国矿业大学软件开发基础实践报告姓名:xxs学号:bbaa0edf专业:计算机科学与技术指导教师:sjc职称:js(仅供徐海计算机参考哈哈哈哈)2012年6月20徐州25离散数学实验三实验报告目录第一章实验概述21.1实验目的21.2实验内容21.3实验环境2第二章实验原理和实现过程32.1实验原理32.1.1建立图的邻接矩阵,判断图是否连通32.1.2计算任意两个结点间的距离32.1.3对不连通的图输出其各个连通支42.2实验过程(算法描述)42.2.1程序整体思路42.2.2具体算法流程4第三章实验数据及结
2、果分析63.1建立图的邻接矩阵并判断图是否连通的功能测试及结果分析63.1.1输入无向图的边63.1.2建立图的连接矩阵73.2其他功能的功能测试和结果分析83.2.1计算节点间的距离83.2.2判断图的连通性83.2.3输出图的连通支93.2.4退出系统9第四章实验收获和心得体会104.1实验收获104.2心得体会11第五章实验源程序清单125.1程序代码1225离散数学实验三实验报告第一章实验概述1.1实验目的理解图论的基本概念,图的矩阵表示,图的连通性,图的遍历,以及求图的连通支方法。通过实验,帮助学生更好地掌握计算机科学技术
3、常用的离散数学中的概念、性质和运算,培养逻辑思维;通过实验提高学生编写实验报告、总结实验结果的能力,提高理论联系实际的能力;使学生具备程序设计的思想,能够独立完成简单的算法设计和分析。1.2实验内容以偶对的形式输入一个无向简单图的边,建立该图的邻接矩阵,判断图是否连通(A),并计算任意两个结点间的距离(B),对不连通的图输出其各个连通支(C)。注意:题目类型分为A,B,C三类,其中A为基本题,完成A类题目可达到设计的基本要求,其他均为加分题,并按字母顺序分数增加越高。基本要求如下:程序需具有基本的容错控制,在输入错误时有处理手段;程
4、序界面友好,需要输入的地方有输入说明,说明输入的内容和格式要求等;实验原理和实现过程应该详细分析问题,给出解决思路,描述算法思想,不能用源程序代替算法;测试数据应全面,包括非法输入的处理结果等都应包含在内。1.3实验环境C或C++语言编程环境实现。25离散数学实验三实验报告第二章实验原理和实现过程2.1实验原理2.1.1建立图的邻接矩阵,判断图是否连通根据图的矩阵表示法建立邻接矩阵A,并利用矩阵的乘法和加法求出可达矩阵,从而判断图的连通性。连通图的定义:在一个无向图G中,若从顶点vi到顶点vj有路径相连(当然从vj到vi也一定有路径
5、),则称vi和vj是连通的。如果G是有向图,那么连接vi和vj的路径中所有的边都必须同向。如果图中任意两点都是连通的,那么图被称作连通图。判断连通图的实现:在图中,从任意点出发在剩余的点中,找到所有相邻点循环,直到没有点可以加入为止,如果有剩余的点就是不连通的,否则就是连通的。或者也可用WallShell算法,由图的邻接矩阵判断图是否连通。2.1.2计算任意两个结点间的距离图中两点i,j间的距离通过检验Al中使得aij为1的最小的l值求出。路径P中所含边的条数称为路径P的长度。在图G中,从结点Vi到Vj最短路径的长度叫从V
6、i到Vj的距离,记为d。设图的邻接矩阵是A,则所对应的aij的值表示,点Vi到点Vj距离为n的路径有aij条。若aij(1),aij(2),…,aij(n-1),中至少有一个不为0,则可断定Vi与Vj可达,使aij(l)≠0的最小的l即为d(Vi,Vj)。问题求解原理为:(1)先构造初始邻接矩阵A=Vij,Vij为顶点Vi到顶点Vj的权。如果Vi和Vj之间不存在弧段或者是负向回路或者是i=j,则令Vij其值为∞。(2)再构造初始中间顶点矩阵。(3)然后开始迭代计算(迭代的次数等于顶点的个数1)(4)最后查找Vi到Vj的
7、最短路径。25离散数学实验三实验报告计算节点Vi与Vj之间的距离的方法为:利用邻接矩阵相互间相乘后得到的矩阵来判断节点间的距离。如果c2[s][i][j]==0,则这两个节点的距离为无穷大。如果c2[s-2][i][j]==0,c2[s-1][i][j]==1时,则这两点间的距离为s。2.1.3对不连通的图输出其各个连通支图的连通支的求法则可采用图的遍历算法,图的遍历有深度优先和广度优先两种方法,其中深度优先算法又分为递归和非递归两种。在无向图中,如果任何两点可达,则称图G是连通的,如果G的子图G’是连通的,没有包含G’的更大的子图
8、G’’是连通的,则称G’是G的连通支。当有判断出关系不是连通的之后,将需要求出分支模块实现方法如下:先定义一个二维数组用来存放相应的分块,先选定一个点,并将它放在数组中,然后判断,如果后面的和他是联通的便将它也放在同一个数组中,否则将
此文档下载收益归作者所有