实验四 -图的实现与应用
实验四 -图的实现与应用
实验内容
实验1
用邻接矩阵实现无向图(边和顶点都要保存),实现在包含添加和删除结点的方法,添加和删除边的方法,size(),isEmpty(),广度优先迭代器,深度优先迭代器。给出伪代码,产品代码,测试代码(不少于5条测试)。。上方提交代码链接。附件提交测试截图。
一般存储图的方式有两种:一是用邻接矩阵表示,二是用邻接链表。
所谓用邻接矩阵,是用一个二维数组存储,边使用矩阵来构建模型,这使得每一个顶点和其它顶点之间都有边的有无 的 表示的机会。若有边,则他们交点 为1 ,否则为0。当然,如果是一副边有权值的图,交点存储的是他们边的权值。
首先收一下无向图的存储:
无向图的边的矩阵一定是一个对称矩阵,因为无向图只关心边是否存在,而不关心方向,V0和V1有边,那么V1和V0也有边。
因为这里不研究有圈图,所以主对角线都是0,输入V0和V1边的关系后,就不必输入V1和V0的关系了。
实验2
用十字链表实现无向图(边和顶点都要保存),实现在包含添加和删除结点的方法,添加和删除边的方法,size(),isEmpty(),广度优先迭代器,深度优先迭代器。给出伪代码,产品代码,测试代码(不少于5条测试)。上方提交代码链接。附件提交测试截图。
十字链表存储结构
定义顶点表结点结构:
其中,firstIn表示入边表头指针,指向该顶点的入边表中第一个结点,firstOut表示出边表头指针,指向该顶点的出边表中的第一个结点。
定义边表结点结构:
其中,tailvex是指弧起点在顶点表的下标,headvex是弧终点在顶点表的下标,headlink是指入边表指针域,指向终点相同的下一条边,tailvex是指边表指针域,指向起点相同的下一条边。
表示
-
给定一个有向图,先画出其邻接表及逆邻接表
-
将两个表中的顶点转化为所在边,即两个顶点组成;
-
在邻接表中添加一个指针域,作为逆邻接表的指针域;
-
将逆邻接表中的链接线在邻接表中找出并进行链接;
实验3
实现PP19.9。给出伪代码,产品代码,测试代码(不少于5条测试)。上方提交代码链接。附件提交测试截图