BFS遍历邻接矩阵和邻接表的代码很相似,因此就写一个的。
邻接矩阵:
bool visited[max_veres];//标志顶点访问与否
void BFSTraverse(Graph G)
{
int i,j;
Queue Q;
for(i = 0; i < G.vertexs; i++)
{
visited[i] = false; //初始化为都没访问过的
}
InitQueue(&Q);//初始化一个队列
for(i = 0; i < G.vertexs; i++)
{
if(!visited[i])//如果没访问过这个顶点
{
visited[i] = true;//设置为已经访问过这个顶点
Visit(i);//访问的具体操作
EnQueue(&Q,i);//让最近访问的顶点进入队列
while(!EmptyQueue(Q))
{
DeQueue(&Q,&i);//使队头的元素出队,并把下标值给i
//以下代码为访问跟i有边的顶点
for(j = 0; j < G.vertexs; j++)
{
if(G.arc[i][[j] == 1 && !visited[j])
{
visited[j] = true;
Visit(j);
EnQueue(&Q,j);//把所有与i的邻接点都入队
}
}
}
}
}
}
仔细一看,这不就是树的层序遍历吗??