代码如下
bool visited[MaxSize]; //标记数组
SqQueue Q; //声明图Q,未实际输入
void visit(int v); //泛指对v操作的函数
void BFS(Graph G, int v)
{
visit(v);
visited[v] = true; //对v做已标记访问
EnQueue(Q, v); //顶点v入队
while (!isEmpty(Q))
{
DeQueue(Q, v); //队头元素v出队
for (int w = FirstNeighbor(G, v); w >= 0; w = NextNeighbor(G, v, w))
//检查v的所有邻接点w
if (!visited[w])//未访问的
{
visit(w); //对w访问等操作,这里可以扩写
visited[w] = true;
EnQueue(Q, w);//w入队
}
}//while
}
void BFSTraverse(Graph G)
{
for (int i; i < G.vexnum; i++)
//G.vexnum为图G的顶点数量
visited[i] = false; //初始化标记数组
InitQueue(Q);
for (int v = 0; v < G.vexnum; ++v)
if (!visited[v])
//每个连通分量只调用一次
BFS(G, v); //即开始广度搜索顶点v能连上的所有点
}
//手敲的,快给?点个赞