1 //广度优先搜索算法
2 #define MAX_VERTEX_NUM 100
3 bool visited[MAX_VERTEX_NUM]; //访问标记数组
4
5 void BFSTraverse(Graph G){
6 //本算法用于对图G进行光度优先遍历
7 for(int i = 0; i < G.vexnum; i++) //访问标记数组初始化
8 visited[i] = false;
9 InitQueue(Q); //初始化辅助队列Q
10 for(i = 0; i < G.vexnuml i++) //从零号顶点开始遍历
11 if(!visited[i])
12 BFS(G,i);
13 }
14 void BFS(Graph G, int v){
15 //从顶点v出发,广度优先便利图G
16 visit(v); //访问初始定点v
17 visited[v] = true; //对v做已访问标记
18 Enqueue(Q,v); //顶点v入队Q
19 while(!isEmpty(Q)){
20 Dequeue(Q,v); //顶点v出队
21 for(w = FirstNeighbor(G,v); w >= 0; w = NextNeighbor(G,v,w)){
22 //检测v所有邻接结点
23 if(!visited[w]){ //w尚未被访问
24 visit(w); //访问w
25 visited[w] = true; //对顶点w做访问标记
26 EnQueue(Q,w); //顶点w入队
27 }
28 }
29 }
30 }