练习6.2 邻接表存储图的广度优先遍历 (20point(s))
试实现邻接表存储图的广度优先遍历。
Example:
#define VISIT(v) Visit(v);Visited[v] = true
void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) )
{
Vertex Q[MaxVertexNum];
int front = 0, rear = 0;
Q[rear++] = S;
VISIT(S);
while(front < rear) {
Vertex v = Q[front++];
PtrToAdjVNode node = Graph->G[v].FirstEdge;
while(node) {
if(!Visited[node->AdjV]) {
Q[rear++] = node->AdjV;
VISIT(node->AdjV);
}
node = node->Next;
}
}
}
思路:
使用队列,将附近没有访问过的顶点进队,同时访问。