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

    /* 邻接表存储的图 - DFS */
     
    void Visit( Vertex V )
    {
        printf("正在访问顶点%d
    ", V);
    }
     
    /* Visited[]为全局变量,已经初始化为false */
    void DFS( LGraph Graph, Vertex V, void (*Visit)(Vertex) )
    {   /* 以V为出发点对邻接表存储的图Graph进行DFS搜索 */
        PtrToAdjVNode W;
         
        Visit( V ); /* 访问第V个顶点 */
        Visited[V] = true; /* 标记V已访问 */
     
        for( W=Graph->G[V].FirstEdge; W; W=W->Next ) /* 对V的每个邻接点W->AdjV */
            if ( !Visited[W->AdjV] )    /* 若W->AdjV未被访问 */
                DFS( Graph, W->AdjV, Visit );    /* 则递归访问之 */
    }
    
    /* 邻接矩阵存储的图 - BFS */
     
    /* IsEdge(Graph, V, W)检查<V, W>是否图Graph中的一条边,即W是否V的邻接点。  */
    /* 此函数根据图的不同类型要做不同的实现,关键取决于对不存在的边的表示方法。*/
    /* 例如对有权图, 如果不存在的边被初始化为INFINITY, 则函数实现如下:         */
    bool IsEdge( MGraph Graph, Vertex V, Vertex W )
    {
        return Graph->G[V][W]<INFINITY ? true : false;
    }
     
    /* Visited[]为全局变量,已经初始化为false */
    void BFS ( MGraph Graph, Vertex S, void (*Visit)(Vertex) )
    {   /* 以S为出发点对邻接矩阵存储的图Graph进行BFS搜索 */
        Queue Q;     
        Vertex V, W;
     
        Q = CreateQueue( MaxSize ); /* 创建空队列, MaxSize为外部定义的常数 */
        /* 访问顶点S:此处可根据具体访问需要改写 */
        Visit( S );
        Visited[S] = true; /* 标记S已访问 */
        AddQ(Q, S); /* S入队列 */
         
        while ( !IsEmpty(Q) ) {
            V = DeleteQ(Q);  /* 弹出V */
            for( W=0; W<Graph->Nv; W++ ) /* 对图中的每个顶点W */
                /* 若W是V的邻接点并且未访问过 */
                if ( !Visited[W] && IsEdge(Graph, V, W) ) {
                    /* 访问顶点W */
                    Visit( W );
                    Visited[W] = true; /* 标记W已访问 */
                    AddQ(Q, W); /* W入队列 */
                }
        } /* while结束*/
    }
    

      

  • 相关阅读:
    BZOJ3997:[TJOI2015]组合数学(DP,Dilworth定理)
    BZOJ4807:車(组合数学,高精度)
    BZOJ4008:[HNOI2015]亚瑟王(DP,概率期望)
    BZOJ1499:[NOI2005]瑰丽华尔兹(DP,单调队列)
    洛谷1514 引水入城
    洛谷 1018 乘积最大
    八数码难题
    CODEVS 1069关押罪犯
    CODEVS 1067 机器翻译
    洛谷 P1417 烹调方案
  • 原文地址:https://www.cnblogs.com/lsj2020/p/6027627.html
Copyright © 2011-2022 走看看