《ACM第讲》-课件设计(公开).ppt

  1. 1、本文档共79页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DFS的基本应用 检查图的连通性和无环性。 因为DFS在访问了所有和初始顶点有路径相连的顶点之后就会停下来,所以我们可以这样检查一个图的连通性:从任意一个顶点开始DFS遍历,在该算法停下来以后,检查一下是否所有的顶点都被访问过了。如果都访问过了,那个这个图是连通的;否则,它是不连通的。更一般地来说,我们可以用DFS来找到一个图的连通分量。 检查图的回路    们可以利用图的DFS森林形式的表示法。如果DFS森林不包含回边,这个图显然是无回路的。如果从某些顶点u到它的祖先v,之间有一条回边,则该图有一个回路,这个回路是由DFS森林中从v到u的路径上的一系列树向边以及从u到v,的回边构成的。 广度优先查找    广度优先查找遍历按照一种同心圆的方式,首先访问所有和初始顶点邻接的顶点,然后是离它两条边的所有未访问顶点,以此类推,直到所有与初始顶点同在一个连通分量中的顶点都访问过了为止。    如果仍然存在未被访问的顶点,该算法必须从图的其他连通分量中的任意顶点重新开始。 分析    使用队列来跟踪广度优先查找的操作是比较方便的。该队列先从遍历的初始顶点开始,将该顶点被标记为己访问。在每次迭代的时候,该算法找出所有和队头顶点邻接的未访问顶点,把它们标记为已访问,再把它们入队;然后将队头顶点从队列中移去。 分析    和DFS遍历类似,在BFS遍历的同时,构造一个所谓的广度优先查找森林是有意义的。    遍历的初始顶点可以作为这样一个森林中第一棵树的根。无论何时,只要第一次遇到一个新的未访问顶点,它是从哪个顶点被访问到的,就把它附加为哪个顶点的子女。    连接这样两个顶点的边称为树向边。    如果一条边指向的是一个曾经访问过的顶点,并且这个顶点不是它的直接前趋,这种边被称为交叉边。 BFS遍历图 BFS遍历队列 BFS森林 伪代码 算法BFS(G) //实现给定图的广度优先查找遍历 //输入:图G=V,E //输出:图G的顶点,按照被BFS遍历访问到   的先后次序,用连续的整数标记将V中   的每个顶点标记为0,表示还“未访问” count←0 for each vertex v in V do   if vismarkedwith 0      bfs(v) 伪代码 bfs(v)  //访问所有和v相连接的未访问顶点,然后按照全局变量count的值  //根据访问它们的先后顺序,给它们赋上相应的数字  count←count+1;mark v with count and initialize a queue with V  While the queue is not empty d0   for each vertex w in V adjacent to the fronts vertex V do   if w is marked with 0   count←count+1;mark w with count   and w to the queue  remove vertex v from the front of the queue 分析    广度优先查找和深度优先查找的效率是相同的。    对于邻接矩阵表示法,它属于Θ(|V|2);    对于邻接链表表示法,它属于Θ(|V|+|E|)。    和深度优先查找不同的是,广度优先查找只产生出顶点的一种序列,因为队列是一种FIFO(先进先出)的结构,所以顶点入队的次序和它们出队的次序是相同的。 BFS森林    BFS森林的结构,它也可能具有两种不同类型的边:树向边和交叉边。    树向边是一种通向原先未访问顶点的边。    交叉边把顶点和那些已访问顶点相连,但和DFS树中的回边不同,它还连接BFS树中同层或者相邻层中的兄弟顶点。 分析    BFS来检查图的连通性和无环性,做法在本质上和DFS是一样的。虽然它并不适用于一些较复杂的应用,但却可以用它来处理一些DFS无法处理的情况。    例如,BFS可以用来求两个给定顶点问边的数量最少的路径。我们从两个给定的顶点中的一个开始BFS遍历,一旦访问到了另一个顶点就结束。从BFS树的根到第二个顶点间的最简单路径就是我们所求得的路径。 例子    在顶点a和g之间的所有路径中,路径a-b-c-g具有最少的边数。    虽然从BFS的操作方式来看,这种应用的正确性是不言而喻的,但要从数学上证明它的正确性并不是十分简单的。 DFS和BFS的主要性质 * 吉林农业大学信息技术学院 * 思考题 问题描述: Smith身上有100块钱,他要到农场去买100只鸡。农场里头有公鸡、母鸡、小鸡三种分类。公鸡、母鸡都

文档评论(0)

沙卡娜 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档