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

来源:互联网 发布:php短信接口怎么写 编辑:程序博客网 时间:2024/06/05 10:03

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,就可以把每个节点都访问到。(两种遍历方法是检索数据的方式,并不是说找不到这些数据了,而是按照某种特定方法来遍历,达到某些目的)

阅读全文
0 0
原创粉丝点击