赞
踩
BFS:广度优先搜索
例如:
遍历顺序:A-B-C-D-E-F-G-H-I
bool visited[MAX_VERTEX_NUM]; //访问标记数组 void BFSTraverse (Graph G) { //对图G进行广度优先遍历,设访问函数为visit() for(i=0; i<G.vexnum, ++i) visited[ i]=FALSE; //访问标记数组初始化 InitQueue (Q) ; //初始化辅助队列Q for(i=0; i<G.vexnum; ++i ) //从0号顶点开始遍历 if(!visited[il) BFS(G, i); //对每个连通分量调用一次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); //访问项点w visited[w]=TRUE; //对W做已访问标记 EnQueue(Q,w); //顶点w入队列 }//if }//while }
说明:
因为BFS逐层访问特点,也就是从起点由近向远访问节点,所以BFS可以用于寻找最短路径。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。