图的深度优先遍历和广度优先遍历
来源:互联网 发布:淘宝手机下单减价 编辑:程序博客网 时间:2024/06/05 10:35
广度优先遍历(BFS)
(1)从某个顶点V出发,访问该顶点的所有邻接点V1,V2..VN
(2)从邻接点V1,V2...VN出发,再访问他们各自的所有邻接点
(3)重复上述步骤,直到所有的顶点都被访问过
(1)从顶点V1出发,v1入队,访问V1,V1的邻接点有V2 V3 V4,将它们入队,v1出队
队列:V2 V3 V4
(2)访问队头V2,V2的邻接点为V1(已访问过,忽略)和V5,将V5入队,V2出队
队列:V3 V4 V5
(3)访问V3,V3的邻接点为V1(访问过忽略) V4(已在队列忽略) V6 V5(已在队列,忽略),V6入队,V3出队
队列:V4 V5 V6
......
/* 邻接矩阵的广度遍历算法 */ 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)) /* 若当前队列不为空 */ { DeQueue(&Q,&i); /* 将队对元素出队列,赋值给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); /* 将找到的此顶点入队列 */ } } } } } }
转载自:http://blog.csdn.net/lom9357bye/article/details/46604657
阅读全文
0 0
- 图的遍历:深度优先遍历和广度优先遍历
- 图的深度优先遍历和广度优先遍历算法
- 图的深度优先遍历和广度优先遍历实现
- 图的深度优先遍历和广度优先遍历
- 图的深度优先遍历和广度优先遍历
- 图的深度优先遍历和广度优先遍历
- 图的深度优先遍历和广度优先遍历
- 图的广度优先遍历和深度优先遍历
- 图的深度优先遍历和广度优先遍历
- 邻接图的广度优先遍历和深度优先遍历
- 图的深度优先遍历和广度优先遍历
- 图的深度优先遍历和广度优先遍历
- 图的深度优先遍历和广度优先遍历
- 图的深度优先遍历和广度优先遍历
- 图的深度优先遍历和广度优先遍历
- 图的建立、广度优先遍历和深度优先遍历
- 数据结构---图的广度优先遍历和深度优先遍历
- 图的深度优先遍历和广度优先遍历
- HTML5-调用-购物车商品(del)-班级添加-也买酒
- 16、图
- java基础学习总结——面向对象1
- 数据库详解
- kendo grid表格加载完成之后触发事件dataBound
- 图的深度优先遍历和广度优先遍历
- LRCN(1)
- 打靶
- 练习 2017-8-14 缓冲字节/字符 输入/输出 流~ 字符的编码和解码
- MySQL 的redo 和 undo
- [Linux] yum和apt-get用法及区别
- STL中next_permutation函数快速上手
- github使用教程与问题解决
- 【CodeForces】616A