广度优先搜索(图的遍历)
来源:互联网 发布:sql server 表变量 编辑:程序博客网 时间:2024/05/20 21:57
所谓的广度优先搜索(Breadth_First Search)是指按照广度方向搜索,它类似于树的按层次遍历,是树的按层次遍历的推广。广度优先搜索的基本思想是:
(1) 从图中某个顶点v0出发,首先访问v0。
(2) 依次访问v0的各个未被访问的邻接点。
(3) 分别从这些邻接点(端结点)出发,依次访问它们的各个未被访问的邻接点(新的端结点)。访问时应保证:如果Vi和Vk为当前端结点,且Vi在Vk之前被访问,则Vi的所有未被访问的邻接点应在Vk的所有未被访问的邻接点之前访问。重复(3),直到所有端结点均没有未被访问的邻接点为止。
若此时还有顶点未被访问,则选一个未被访问的顶点作为起始点,重复上述过程,直至所有顶点均被访问过为止。
void BFSTraverse(MGraph G,Status(*Visit)(VertexType))
{ /* 初始条件: 图G存在,Visit是顶点的应用函数。算法7.6 */
/* 操作结果: 从第1个顶点起,按广度优先非递归遍历图G,并对每个顶点调用函数 */
/* Visit一次且仅一次。一旦Visit()失败,则操作失败。 */
/* 使用辅助队列Q和访问标志数组visited */
int v,u,w;
VertexType w1,u1;
LinkQueue Q;
for(v=0;v<G.vexnum;v++)
visited[v]=FALSE; /* 置初值 */
InitQueue(&Q); /* 置空的辅助队列Q */
for(v=0;v<G.vexnum;v++)
if(!visited[v]) /* v尚未访问 */
{
visited[v]=TRUE; /* 设置访问标志为TRUE(已访问) */
Visit(G.vexs[v]);
EnQueue(&Q,v); /* v入队列 */
while(!QueueEmpty(Q)) /* 队列不空 */
{
DeQueue(&Q,&u); /* 队头元素出队并置为u */
strcpy(u1,*GetVex(G,u));
for(w=FirstAdjVex(G,u1);w>=0;w=NextAdjVex(G,u1,strcpy(w1,*GetVex(G,w))))
if(!visited[w]) /* w为u的尚未访问的邻接顶点的序号 */
{
visited[w]=TRUE;
Visit(G.vexs[w]);
EnQueue(&Q,w);
}
}
}
printf("/n");
}
- 图的遍历-广度优先搜索
- 广度优先搜索(图的遍历)
- 图的遍历 之 广度优先搜索
- 广度优先搜索,图的遍历
- 广度优先搜索,图的遍历
- 广度优先搜索,图的遍历
- 图的遍历---广度优先搜索(BFS)
- 广度优先搜索,图的遍历
- 图的遍历之广度优先搜索
- C广度优先搜索,图的遍历
- 图的广度优先搜索遍历
- 【数据结构】图的遍历--广度优先搜索
- 图的广度优先搜索遍历
- 图的遍历(广度优先搜索)
- 图的遍历 深度优先搜索 广度优先搜索
- 图的遍历之广度优先搜索遍历
- 图的遍历(广度优先搜索遍历)
- 数据结构--图--图的数组存储表示,深度优先搜索遍历和广度优先搜索遍历
- 新人报到
- 盛大网络 陈天桥力挺360,腾讯再受打击
- 俄只能一直往前走,
- 我心目中的编程高手(完整版)
- unbutu 常用软件
- 广度优先搜索(图的遍历)
- 索引的基本原理,以及数据是如何被访问的
- str.match()
- 关于:vc程序结束后暂停以查看
- js 浏览器类型判断 定义符号(类jQ) 定义类
- 笔记
- 线程
- 做网站得迷糊了
- 学习之路——艰苦