数据结构 第六章 图-4

深度优先搜索:

优先选取最后一个被访问到的顶点的邻居。

template <typename Tv, typename Te> 
void Graph<Tv,Te>::dfs ( int s ) {
    reset(); int clock = 0; int v = s;
    do 
        if ( UNDISCOVERED == status ( v ) ) 
            DFS ( v, clock );
    while ( s != ( v = ( ++v % n ) ) );
}

template <typename Tv, typename Te> 
void Graph<Tv,Te>::DFS ( int v, int& clock ) {
    dTime ( v ) = ++clock; status ( v ) = DISCOVERED;
    for ( int u = firstNbr ( v ); -1 < u; u = nextNbr ( v, u )) {
        switch ( status ( u ) ) {
            case UNDISCOVERED : 
                type ( v, u ) = TREE; parent( u ) = v; DFS ( u, clock ); 
                break;
            case DISCOVERED : 
                type ( v, u ) = BACKWARD; 
                break;
            default : 
                type ( v, u ) = ( dTime ( v ) < dTime ( u ) ) ? FORWARD : CROSS; 
                break;
        }
        status ( v ) = VISITED; fTime ( v ) = ++clock;
    }
} 
发布了85 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/lun55423/article/details/104154655