图的遍历及生成树.pptVIP

  • 1
  • 0
  • 约4.79千字
  • 约 32页
  • 2025-09-03 发布于广东
  • 举报

图的遍历及生成树2010-3-3第1页,共32页,星期日,2025年,2月5日期末考试长春工业大学数据结构精品课程网站习题解析/sjjg/index.php?option=com_contenttask=categorysectionid=id=21Itemid=266第2页,共32页,星期日,2025年,2月5日第3页,共32页,星期日,2025年,2月5日7.3图的遍历从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次。这一过程就叫做图的遍历。抽象操作,可以是对结点进行的各种处理,这里简化为输出结点的数据。第4页,共32页,星期日,2025年,2月5日图的遍历操作要解决的关键问题1、在图中,如何选取遍历的起始顶点?在图中,任何两个顶点之间都可能存在边,顶点是没有确定的先后次序的,所以,顶点的编号不唯一。这里指按顶点的存储顺序。解决方案:从编号小的顶点开始。2、因图中可能存在回路,在访问完某个顶点之后会沿着某些边又回到了曾经访问过的顶点。那么如何避免顶点的重复访问?解决方案:附设访问标志数组visited[0..n-1],它的初始状态为0,在图的遍历过程中,一旦某一个顶点i被访问,就立即改visited[i]为1,防止它被多次访问。第5页,共32页,星期日,2025年,2月5日1.深度优先搜索(DFS,Depth_FirstSearch)基本思想:(1)从图中某顶点V0出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到;(2)若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点;(3)重复上述两步,直至图中所有顶点都被访问到为止。与树的先序遍历过程类似第6页,共32页,星期日,2025年,2月5日详细过程:1)1.1在访问图中某一起始顶点v后,由v出发,访问它的任一邻接顶点w1;1.2再从w1出发,访问与w1邻接但还未被访问过的顶点w2;1.3然后再从w2出发,进行类似的访问……直至到达所有的邻接顶点都被访问过的顶点u为止。2)退回一步,退到前一次刚访问过的顶点,看是否还有其它未被访问的邻接顶点:2.1如果有,则访问此顶点,之后再从此顶点出发,返回第1)步的操作;2.2如果没有,就再退回一步进行搜索。2.3重复上述过程,直到连通图中所有顶点都被访问过为止。第7页,共32页,星期日,2025年,2月5日例:从顶点v1出发,DFS下图。访问序列:v1,v2,v4,v8,v5,v3,v6,v7v1v6v2v5v3v8v4v7v1v6v2v5v3v8v4v7第8页,共32页,星期日,2025年,2月5日图的DFS算法一般描述intvisited[MAXVEX];//访问标志数组voidDFSTraverse(GraphG){//对图G作深度优先遍历for(v=0;vG.vexnum;++v)visited[v]=FALSE;//访问标志数组初始化0for(v=0;vG.vexnum;++v)if(!visited[v])DFS(G,v);//对尚未访问的顶点调用DFS}第9页,共32页,星期日,2025年,2月5日voidDFS(GraphG,intv){//从第v个顶点出发递归地深度优先遍历图Gvisited[v]=TRUE;Visit(v);//访问第v个顶点//对v的尚未访问的邻接顶点w递归调用DFSfor(w=FirstAdjVex(G,v);w=0;w=NextAdjVex(G,v,w))if(!visited[w])DFS(G,w);}第10页,共32页,星期日,2025年,2月5日用邻接表实现图的深度优先搜索v1v6v2v5v3v8v4v7v9v101234567817^17^26^25^34^23^12^056^034^9108/\9/\0123456789第11页,共32页,星期日,2025年,2月5日在图的邻接

文档评论(0)

1亿VIP精品文档

相关文档