广度优先遍历:以点开始,逐层遍历,类似于二叉树的层序遍历。借助队列实现。
相关变量和数据结构定义:
/*
图的邻接矩阵表示
*/
typedef char VertexType;
typedef int EdgeType;
#define MAXVEX 100
#define INFINITY 65535
typedef struct
{
VertexType vexs[MAXVEX];
EdgeType arc[MAXVEX][MAXVEX];
int numVertexes,numEdges;
}MGraph;
广度优先遍历代码:
/*
邻接矩阵广度优先遍历
*/
void BFSTraverse(MGraph G)
{
int i,j;
Queue Q;
for(i=0;i<G.numVertexes;i++)
{
visited[i] = FALSE;
}
InitQueue(&Q);
for(i=0;i<G.numVertexes;i++)
{
if(!visited[i])
{
visited[i] = TRUE;
printf("%c",G.vexs[i]);
//将此点入队列
EnQueue(&Q,i);
while(!QueueEmpty(Q))
{
//将队列中元素出队列,并赋值给i
DeQueue(&Q,&i);
for(j=0;j<G.numVertexes;j++)
{
if(G.arc[i][j] == 1 && !visited[j])
{
visited[j]=TRUE;
printf("%c",G.vexs[j]);
EnQueue(&Q,j);
}
}
}
}
}
}