图的广度优先遍历(非递归)分析:主要思想用队列实现,(与二叉树的层次遍历类似,)第一个结点A入队,然后与其相关的结点都入队,A出队并输出A已经被访问,,此时找与队首元素(假设为B)相关的结点,全部入队,B出队并输出B已经被访问,依次循环直到队列为空。
//图的遍历(广度优先)
void DFS(AdjMatrix *G,Visit *V)
{
int queue[10];
int front=0,rear=0,i=1,j;
queue[++rear]=1;
printf(“结点1已入队!\n”);
V->a2[0]=1;
//printf(“%5d”,G->vexnum);
while(front!=rear)
{
for(j=1;j<=G->vexnum;j++)
{
if(G->a[i][j]==1&&V->a2[j-1]==0)
{
queue[++rear]=V->a1[j-1];
printf(“结点%d已入队!\n”,V->a1[j-1]);
V->a2[j-1]=1;
}
}
i++;
//出队
front++;
printf(“%d已出队!\n”,queue[front]);
}
printf(“图已遍历完!!!\n”);
}