• 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
    
  • 相关阅读:
    Redis哨兵模式 (sentinel) (主从复制,读写分离)
    字符串的全排列
    测试链接
    vue数组能触发视图更新的方法
    PyCharm Shortcuts of macOS
    Tweak SecureCRT for macOS
    rsyslogd 以及日志轮替 logrotate
    阿里云服务器常见操作
    sh 启动jar
    招募军队(最小生成树)
  • 原文地址:https://www.cnblogs.com/nightland/p/13504385.html
Copyright © 2020-2023  润新知