《大话数据结构》之广度优先遍历
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);
}
}
}
}
}
}
相关变量和数据结构定义:
/*
图的邻接矩阵表示
*/
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);
}
}
}
}
}
}
相关文章推荐
- 渗透技术一瞥(图)
- 图片引发的溢出危机(图)
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
- C++实现图的邻接表存储和广度优先遍历实例分析
- jQuery圆形统计图开发实例
- 手机短信轰炸(图)
- C语言实现图的遍历之深度优先搜索实例
- python数据结构之图的实现方法
- ASP.Net页面生成饼图实例
- 基于Java实现的图的广度优先遍历算法
- RelativeLayout浅谈
- 图
- Ext Scheduler Web资源甘特图控件
- 键盘码 图
- 图(1)——图的定义和基本概念
- 图(2)—— 邻接矩阵表示法
- 图(2)—— 邻接矩阵表示法
- 图(3)——邻接链表法
- 图(3)——邻接链表法
- Clone Graph