图的遍历
广度优先搜索(BFS)
bool visited[MAX_VERTEX_NUM]; //访问标记数组
void BFSTraverse(Graph G){
//对图G进行广度优先遍历,设访问函数为visited()
for(int i = 0; i < G.vexnum; i++){
visited[i] = False; //访问标记数组初始化
}
InitQueue(Q); //初始化辅助队列Q
for(int i = 0; i < G.vexnum; i++){ //从0号顶点开始遍历
if(!visited[i]){ //对每个连通分量调用一次BFS
BFS(G,i); //Vi未访问过,从Vi开始BFS
}
}
}
void BFS(Graph G, int v){
//从顶点v出发,广度优先遍历图G,算法借助一个辅助队列Q
visit(v); //访问初始顶点v
visited[v] = True; //对v做已访问标记
Enqueue(Q,v); //顶点v入队列
while(!isEmpty(Q)){
DeQueue(Q,v); //顶点v入队
for(w = FirstNeighbor(G,v); w >= 0; w = NextNeighbor(G,v,w)){ //检测v所有邻接点
if(!visited[w]){ //w为v尚未访问的邻接顶点
visit(w);
visited[w] = True;
EnQueue(Q,w); //顶点w入队
}
}
}
}1、BFS算法的性能分析
2、BFS算法求解单源最短路径问题
3、广度优先生成树

深度优先搜索(DFS)
1、DFS算法的性能分析
2、深度优先的生成树和生成森林
图的遍历与图的连通性
Last updated