ch8图(遍历).ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
作业写出从号顶点开始的遍历结果写出从号顶点开始的遍历结果图的遍历从图中某个顶点出发遍历图访遍图中其余顶点并且使图中的每个顶点仅被访问一次的过程图的遍历有两种方法深度优先搜索遍历广度优先搜索遍历它们对无向图和有向图都适用连通图的深度优先搜索遍历深度优先搜索的基本思想首先访问初始出发点并将其标记设置为已访问然后任选一个与相邻接且没有被访问的邻接点作为新的出发点访问之后将其标记设置为已访问再以为新的出发点继续进行深度优先搜索访问与相邻接且没有被访问的任一个顶点重复上述过程若遇到一个所有邻接点均被访问过

作业 P189/8.5 (1)写出从0号顶点开始的DFS遍历结果 (2)写出从0号顶点开始的BFS遍历结果 * 8.3 图的遍历 从图中某个顶点出发遍历图,访遍图中其余顶点,并且使图中的每个顶点仅被访问一次的过程。 图的遍历有两种方法: 深度优先搜索遍历(DFS) 广度优先搜索遍历(BFS) 它们对无向图和有向图都适用。 8.3.1 连通图的深度优先搜索遍历 1.深度优先搜索(dfs)的基本思想 首先访问初始出发点V0,并将其标记设置为已访问; 然后任选一个与V0相邻接且没有被访问的邻接点V1作为新的出发点,访问V1之后,将其标记设置为已访问; 再以V1为新的出发点,继续进行深度优先搜索,访问与V1相邻接且没有被访问的任一个顶点V2; 重复上述过程,若遇到一个所有邻接点均被访问过的顶点,则回到已访问顶点序列中最后一个还存在未被访问的邻接点的顶点,再从该顶点出发继续进行深度优先搜索,直到图中所有顶点都被访问过,搜索结束。 dfs遍历举例: V0 V1 V2 V3 V4 V5 V6 V7 dfs遍历部分顶点序列(V0顶点出发) : (1)V0、 V1、 V2、 V4、 V3、 V5、 V6、 V7 (2)V0、 V1、 V2、 V4、 V3、 V7、 V5、 V6 (3)V0、 V1、 V3、 V5、 V6、 V7、 V2、 V4 dfs序列 不唯一! 算法描述: 访问开始顶点(如 v); 寻找 v 顶点未被访问的第一个邻接顶点(如 w); 并把 w 作为开始顶点继续深度优先搜索遍历(递归思想); 直到所有顶点被访问; 其中处理: (1)访问顶点:自定义访问函数 visit() (2)未被访问的邻接点:定义一个标记数组:int visited[MAX] visited[i]= 0 i号顶点未被访问 1 i号顶点已被访问 注意:由于函数是递归的,数组定义成外部数组 (3)第一个邻接点:按邻接矩阵或邻接表中边存储的顺序 2 . dfs递归算法 按算法实现的dfs遍历举例: V0顶点出发遍历结果(唯一) : V0、 V1、 V2、 V3、 V4 V2顶点出发遍历结果(唯一) : V2、 V1、 V0、 V4、 V3 V0 V1 V2 V3 V4 无向图 邻接矩阵存储结构 V0 V1 V2 V3 V4 0 1 2 3 4 函数实现: 形参:图变量地址,开始顶点的序号(下标) 返回值:无 void dfs(MGraph *g, int v) { int j, w; visit(g, v); /*访问v号顶点*/ visited[v]=1; /*v号顶点为已访问*/ for(j=0; j g-vn; j++) /*找所有的邻接顶点*/ if( g-arc[v][j]==1 visited[j]==0) /*v号顶点与j号顶点 间有边,且j号顶点未被访问*/ { w=j; dfs(g, w); } } 2 . dfs递归算法 邻接矩阵存储结构的图 起始顶点的序号(下标) void visit (MGraph *g, int v) { printf(\n %d, g-vex[v]); } typedef struct{ vextype vex[MAX]; int arc[MAX][MAX]; int vn, en; }MGraph; 设计程序创建邻接矩阵的无向图,并用dfs图中顶点信息并输出: 宏定义及数据类型: #include stdlib.h #define MAX 20 /*图顶点最多不超过20*/ typedef int vextype; /*图顶点为int型*/ typedef struct{ vextype vex[MAX]; int arc[MAX][MAX]; int vn, en; } MGraph; /*邻接矩阵图类型*/ int visited[MAX]; /*访问标记数组*/ 函数定义: void CreateGraph(MGraph *g) /*创建无向图*/ { …… }

文档评论(0)

wangsux + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档