int Q[20];
int front = -1;
int rear = -1;
void push(int x)
{
Q[++rear] = x;
}
int pop ()//出队且释放
{
return Q[++front];
}
//首先放一个元素 然后把那个元素的所有的邻接也放进去 然后出队首 再放进去队首的所有元素
//每个元素只能放队列一次 需要标记
void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) )
{
push(S);
Visited[S] = true;
while (rear!=front)
{
int u = pop();//取出来后 需要把这个结点的邻接点再放进来 也就是邻接表里面的元素了
Visit(u);
//找这个遍历方法 搞了好久 应该是链表学的不太好吧 这里指来指去的 烦死了
for (PtrToAdjVNode W = Graph->G[u].FirstEdge;W;W=W->Next)//怎么遍历元素
{
if (!Visited[W->AdjV])//可以访问
{
push(W->AdjV);
Visited[W->AdjV] = true;
}
}
}
}
就是队列的实现 有模板练习
关键就是那个怎么遍历本链表的所有元素,这里有点卡,其他的就很简单了