- 1、本文档共105页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章 图;目录;9.1 基本概念及其抽象数据类型; 图由顶点的非空有穷集合V和边的集合 E组成,记为G=(V,E)。
每条边就是一个顶点的偶对,所以E也就是V上的关系。;有向图 始点 终点 无向图有向完全图 无向完全图关联邻接;与图论中的图概念比较;9.1.2 抽象数据类型(关心图中每个结点和边的处理 );在图g中删除一个顶点和与该顶点相关联的所有边 Graph deleteVertex (Graph g , Vertex v )
在图g中删除一条边e( vi,vj或者(vi,vj) ) Graph deleteEdge (Graph g , Vertex vi , Vertex vj )在图g中增加一条边vi,vj或者(vi,vj)
Graph addEdge (Graph g , Vertex vi , Vertex vj ) 判断图g中是否存在一条指定边vi,vj或者(vi,vj) int findEdge (Graph g , Vertex vi , Vertex vj )
找图g中与顶点v相邻的第一个顶点
Vertex firstAdjacent (Graph g , Vertex v )
/*v与返回顶点构成的边也称为与v相关联的第一条边。*/找图g中与vi相邻的,相对相邻顶点vj的,下一个相邻顶点 Vertex nextAdjacent (Graph g , Vertex vi , Vertex vj )
/* vi与返回值构成的边也称为是vi与vj构成的边的下一条边。*/ end ADT Graph;讨论:图是一种十分广泛的结构;9.2 图的周游;9.2.1 深度优先周游; 对图进行深度优先周游时,按访问顶点的先后次序所得到的顶点序列,称为该图的深度优先搜索序列,简称DFS序列
对于G1图,如果从v0出发得到的DFS序列为∶ v0,v1,v2;
如果从v2出发得到的DFS序列可以为∶v2,v0,v1;或者是:v2,v1,v0。;算法
为了避免重复访问已访问过的顶点,通常要对已访 问的顶点作标记。在顶点中增设一个标记字段mark,算法执行前所有顶点的mark字段都置为FALSE,表
示均未被访问,周游过程中将被访问的顶点的mark值改为TRUE。
由于从一个顶点出发的搜索不一定能够访问到图中所有顶点。因此,在函数中构造了一个循环,检索所有顶点是否已经访问。
基于抽象数据类型定义的操作(抽象算法) void dft ( Graph g );;9.2.2 广度优先周游; 对图按广度优先周游得到的顶点序列称为广度优先搜索序列,简称BFS序列。
对于G1图,如果从v0出发得到的BFS序列为∶ v0,v1,v2;
如果从v2出发得到的BFS序列可以为∶ v2,v0,v1;或者是:v2,v1,v0。;算法 与深度优先周游算法类似: void bft ( Graph g )
假设每个顶点包含一个mark字段,在周游前所有顶点的mark字段均被置为FALSE,周游到该结点时将相应的mark字段改为TRUE。
bft中调用了函数bfs ( g , v ),其功能是从顶点v出发按广度优先周游g中能访问的各个顶点。具体实现中使用一个队列q,队列元素的类型为 Vertex
void bfs ( Graph g , Vertex v );9.3 存储表示; 设G=(V,E)为具有n个顶点的图,每个顶点的类型为VexType,顶点表使用类 型为VexType的数组vexs表示;关系矩阵是一个n*n的方阵,取名为arcs,具有以下性质:;/* 图的顶点个数*/
/* 顶点信息; 无向图G5和有向图G6的顶点表分别为 vexs1和vexs2,关系矩阵分别为arcs1和 arcs2:;vexs1[]={‘a’, ‘b’, ‘c’, ‘d’};vexs2[]={v0,v1,v2,v3,v4};图的邻接矩阵表示法具有以下特点∶; 如果G是带权的图,wij是边(vi,vj)或 vi,vj权,则其关系矩阵的所有对角线的值为0, 其它元素定义为∶;例如:;讨论;9.3.2 邻接表表示法; 顶点表中每个表目对应于图中的一个顶点,包括两个字段∶顶点字段(vertex)存放顶点vi
的信息,指针字段(edgelist)存放与vi相关联的边表中的第一个边结点的位置;
边表中每个边结点表示的都是与vi关联的边,包括:边的另外一端在顶点表中的位置字段 (endvex)、权字段(weight)存放边的权值(如果不是带权图,则应该省略权字段),和指 向边表的下一个边结点的链字段(nextedge) 。;struct EdgeNode;
typedef struct EdgeNode * PEdgeNode; typedef struct EdgeNode
文档评论(0)