数据结构——第六讲、图(上)(2)

6.2 图的遍历

图的遍历有两种方式:DFS(深度优先搜索)和BFS(广度优先搜索)。

DFS:就是从某一个节点开始,依次访问它的邻接点,每个邻接点都递归的调用DFS方法。

void DFS(Vertex V){
    V.Visited = true;

    //对于邻接表来说,访问V的每一个邻接点就是找到V对应的链表依次访问
    //对于邻接矩阵来说,需要访问V对应的那一行里所有的非零(或无穷)项

    for(V的每一个邻接点W){
        if(W没有被访问过){
            DFS(W);
        }
    }
}

BFS:广度优先搜索,类似于树的层序遍历,用队列实现。

void BFS(Vertex V){
    V.Visited = true;
    Queue Q;
    AddQ(Q,V);
    while(!IsEmpty(Q)){
        V = Delete(Q);
        for(V的每一个邻接点W){
            if(W没有被访问){
                V.Visited = true;
                AddQ(Q,W);
            }
        }
    }
}

两种遍历方法各有优劣,不同的情况适用不同的方法。

有的时候图并不是联通的,这时候要遍历,需要把图中的每个没有被访问的节点都调用一次BFS或DFS,就可以把每个节点都访问到。(两种遍历方法是检索数据的方式,并不是说找不到这些数据了,而是按照某种特定方法来遍历,达到某些目的)

猜你喜欢

转载自blog.csdn.net/github_39312212/article/details/78205451
今日推荐