您的位置:首页 > 理论基础 > 数据结构算法

《大话数据结构》之广度优先遍历

2015-11-26 14:33 246 查看
广度优先遍历:以点开始,逐层遍历,类似于二叉树的层序遍历。借助队列实现。

相关变量和数据结构定义:

/*
图的邻接矩阵表示
*/
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);
}
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息