广度优先遍历(BreadthFirstSearch)类似于树的层次遍历
假设从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直至图中所有已被访问的顶点的邻接点都被访问到。
广度优先遍历可以用队列来实现
void BFSTraverse (Graph G)
{
int i,j;
Queue Q;
for (i = 0; i< G.numVertexes; i++) {
visited[i] = 0;
}
initQueue(&Q);//创建队列
for (i = 0; i < G.numVertexes; i++) {
if (!visited[i]) {
printf("%c",G.vex[i]);
visited[i] = 1;
EnQueue(&Q,i);//入队列
while (!QueueEmpty(Q)) {
DeQueue(&Q, &i);//出队列
for (j = 0; j < G.numVertexes; j++) {
if (G.art[i][j] == 1 && !visited[j]) {
printf("%c",G.vex[j]);
visited[j] = 1;
EnQueue(&Q,j);
}
}
}
}
}
}