zoukankan      html  css  js  c++  java
  • 7.3 图的遍历


    title: 数据结构 | 图-3 | 图的遍历
    date: 2019-11-26 22:38:52
    tags: 数据结构


    BFS、DFS

    深度优先遍历(DFS)

    • 从图的某一顶点V0出发,访问此顶点;然后依次从V0的未被访问的邻接点出发,深度优先遍历图,直至图中所有和V0相通的顶点都被访问到;
      若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点作起点,重复上述过程,直至图中所有顶点都被访问为止
    //--- 下列算法使用的全局变量 ---
    Boolean visited[MAX]; // 访问标志数组
    Status (* VisitFunc)(int v); // 函数变量
    
    void DFS(Graph G, int v) {
    // 从第v个顶点出发递归地深度优先遍历图G。
         visited[v] = TRUE; 
         VisitFunc(v); 
    // 访问第v个顶点    
    	for(w=FirstAdjVex(G,v);w!=0;w=NextAdjVex(G,v,w))
            if(!visited[w]) 
            	DFS(G, w); 
    // 对v的尚未访问的邻接顶点w递归调用DFS
    }
    void DFSTraverse(Graph G, Status (*Visit)(int v)) {
            // 对图G作深度优先遍历。
           VisitFunc = Visit; 
          for (v=0; v<G.vexnum; ++v) 
                 visited[v] = FALSE; // 访问标志数组初始化
          for (v=0; v<G.vexnum; ++v) 
                if (!visited[v]) 
                	DFS(G, v); 
                 // 对尚未访问的顶点调用DFS
    }
    

    深度遍历邻接表例子

    广度优先遍历(BFS)

    • 从图的某一顶点V0出发,访问此顶点后,依次访问V0的各个未曾访问过的邻接点;然后分别从这些邻接点出发,广度优先遍历图,直至图中所有已被访问的顶点的邻接点都被访问到;
      若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点作起点,重复上述过程,直至图中所有顶点都被访问为止
    void BFSTraverse( Graph G, status (*visit )(int v ))  {
        for( v = 0; v < G.vexnum; ++v)
            visited[v] = FALSE; 
        InitQueue( Q );
        for( v = 0; v < G.vexnum;  ++ v)
           if( !visited[v] ){
              visited[v] = TRUE;
              visit( v ); 
              EnQueue( Q, v );
              while( !QuqueEmpty( Q))  {
                  Dequeue( Q, u ); 
                 for(w=FirstAdjVex(G,u);w;w=NextAdjVex(G,u,w))
    	            if( !Visited[w] ){
    	                Visited[w]=TRUE;
    	                Visit( w );
    	                Enqueue(Q,w);
                     }// if
    	    }// while
          }// if
    }// BFSTraverse
    
  • 相关阅读:
    Oracle Data Provider for .NET now on NuGet
    Entity Framework6 with Oracle(可实现code first)
    $.each()方法详解
    5次Shift会触发粘滞键的妙用(转)
    明知道员工不喜欢干一件事,干不好一件事,你还一定要他去干,犯贱就贱在和员工讲道理争输赢,有意思吗?人尽其才,物尽其用(转)
    ssh连接失败,排错经验(转)
    如何对 GIT 分支进行规划? (转)
    海外优秀资源清单(转)
    iOS中block实现的探究
    JNDI数据源配置注意事项
  • 原文地址:https://www.cnblogs.com/nightland/p/13504385.html
Copyright © 2011-2022 走看看