20162313 苑洪铭 实验四 图的实现与应用
实验1
要求
用邻接矩阵实现无向图(边和顶点都要保存),实现在包含添加和删除结点的方法,添加和删除边的方法,size(),isEmpty(),广度优先迭代器,深度优先迭代器
给出伪代码,产品代码,测试代码(不少于5条测试)
内容
邻接矩阵(Adjacency Matrix):是表示顶点之间相邻关系的矩阵。设G=(V,E)是一个图,其中V={v1,v2,…,vn}。
对无向图而言,邻接矩阵一定是对称的,而且主对角线一定为零,副对角线不一定为0。
总的来说,这次的代码首先定义一下顶点和边,
然后在此基础上,编写添加删除操作以及size 、isempty方法
如图在size方法直接返回前文中定义的size值即可
而isempty方法我认为返回size值为0时就可以了。
深度广度迭代器课本上就有现成的代码。
并且该试验中的大部分代码都可以在老师给的PPT上找到,包括伪代码等等。
实验2
要求
用十字链表实现无向图(边和顶点都要保存),实现在包含添加和删除结点的方法,添加和删除边的方法,size(),isEmpty(),广度优先迭代器,深度优先迭代器
给出伪代码,产品代码,测试代码(不少于5条测试)
内容
十字链表(Orthogonal List)是有向图的一种存储方法,它实际上是邻接表与逆邻接表的结合,即把每一条边的边结点分别组织到以弧尾顶点为头结点的链表和以弧头顶点为头顶点的链表中。
可以理解为 将行的单链表和列的单链表结合起来存储稀疏矩阵称为十字链表, 每个节点表示一个非零元素。
主要用于解决当矩阵的非零元个数和位置在操作过程中变化较大时,不宜采用顺序存储结构来表示三元组的线性表的问题。
如图:
该实验的主要难题我认为在于指向问题,为了完成指向操作,对于十字链表清醒的认识是最重要的。
对于代码而言,与实验一大同小异,参考实验一的部分。
定义顶点与边,再参考网上的代码实现其它实验要求。
实验3
要求
实现PP19.9
给出伪代码,产品代码,测试代码(不少于5条测试)
内容
对于PP19.9 要求很奇特,实际根据我自己的理解,翻译一下就是
构建一个图要求有带权值的边并且求最短路径。
当翻译成这样简单明了的要求后,
我的办法是参考网上的代码,并且根据老师给的PPT内容,了解一下相关操作,由此进行要求实现。