- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
指向依附于 ivex 的下一条边 7.2.3 邻接多重表(无向图的另一种链式存储结构) 邻接表优点:容易求得顶点和边的信息。 缺点:某些操作不方便(如:删除一条边需找表示此 边的两个结点)。 邻接多重表:每条边用一个结点表示。其结点结构如下: 指向依附于 jvex 的下一条边 mark ivex ilink jvex jlink info 边结点 data firstedge 顶点结点 存与顶点有关的信息 指向第一条依附于该顶点的边 标志域 标记此边是 否被搜索过 该边依附的两个顶点在表头数组中位置 0 3 0 1 2 3 4 v2 v1 v3 v4 v5 G2 v5 v4 v3 v2 v1 0 1 2 3 2 1 2 4 4 1 ^ ^ ^ ^ ^ 指向依附于 ivex 的下一条边 指向依附于 jvex 的下一条边 mark ivex ilink jvex jlink info 边结点 标志域 标记此边是 否被搜索过 该边依附的两个顶点在表头数组中位置 data firstedge 顶点结点 存与顶点有关的信息 指向第一条依附于该顶点的边 #define MAX_VERTEX_NUM 20 typedef emnu {unvisited, visited} VisitIf; typedef struct Ebox { VisitIf mark; // 访问标记 int ivex, jvex; // 该边依附的两个顶点的位置 struct EBox *ilink, *jlink; // 分别指向依附这两个顶点的下一条边 InfoType *info; // 该边信息指针 } EBox; typedef struct VexBox { VertexType data; EBox *firstedge; // 指向第一条依附该顶点的边 } VexBox; typedef struct { VexBox adjmulist[MAX_VERTEX_NUM]; int vexnum, edgenum; // 无向图的当前顶点数和边数 } AMLGraph; 无向图的邻接多重表存储表示: ▲ 7.3 图的遍历 从图的任意指定顶点出发,依照某种规则去访问图中所有顶 点,且每个顶点仅被访问一次,这一过程叫做图的遍历。 图的遍历按照深度优先和广度优先规则去实施,通常有深度 优先遍历法(Depth_First Search——DFS )和 广度优先遍历法 ( Breadth_Frist Search——BFS)两种。 V1 V2 V4 V5 V3 V7 V6 V8 7.3.1 深度优先遍历(DFS) 方法:1、访问指定的起始顶点; 2、若当前访问的顶点的邻接顶点有未被访问的,则任选 一个访问之;反之,退回到最近访问过的顶点;直到 与起始顶点相通的全部顶点都访问完毕; 3、若此时图中尚有顶点未被访问,则再选其中一个顶点 作为起始顶点并访问之,转 2; 反之,遍历结束。 例: V1 V1 V2 V4 V5 V3 V7 V6 V8 顶点访问次序: ?V2 ?V4 ?V8 ?V5 ?V3 ?V6 ?V7 V1 ?V2 ?V5 ?V8 ?V4 ?V3 ?V6 ?V7 V1 ?V2 ?V4 ?V8 ?V5 ?V3 ?V7 ?V6 V1 ?V2 ?V5 ?V8 ?V4 ?V3 ?V7 ?V6 V1 ?V3 ?V6 ?V7 ?V2 ?V4 ?V8 ?V5 连通图的深度优先遍历类似于树的先根遍历 a b c h d e k f g a c h d f k e b g 顶点访问次序: 例: a c h d f k e g b a c h f k e d b g 解决办法:为每个顶点设立一个
文档评论(0)