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