数据结构之图---广度优先遍历---C++实现
来源:互联网 发布:海贼王887 知乎 编辑:程序博客网 时间:2024/06/07 23:15
一、目标图对其实现广度优先遍
二、实现深度优先遍历
1、结点的描述
2、图的描述
以上描述见上篇:数据结构之图--深度优先遍历---C++实现 :http://blog.csdn.net/wys2011101169/article/details/52238644
//在main.cpp中添加//当我们调用的深度优先后,结点已经设置为访问过了,所以需要重置一下,在调用广度优先遍历cout << endl;pMap->resetNode();pMap->breadthFirstTraverse(0);
三、深度优先遍历的算法分析
算法核心代码//CMap.cppvoid CMap::breadthFirstTraverse(int nodeIndex){cout << m_pNodeArray[nodeIndex].m_cData << " ";m_pNodeArray[nodeIndex].m_bisVisited = true;vector<int> curVec;curVec.push_back(nodeIndex);breadthFirstTraversalImpl(curVec);}void CMap::breadthFirstTraversalImpl(vector<int> preVec) //广度优先遍历实现函数{int value = 0;vector<int> curVec;for (int j = 0; j < (int)preVec.size();j++){for (int i = 0; i < m_iCapacity;i++){getValueFromMatrix(preVec[j], i, value);if (value !=0){if (m_pNodeArray[i].m_bisVisited){continue;}else{cout << m_pNodeArray[i].m_cData << " ";m_pNodeArray[i].m_bisVisited = true;curVec.push_back(i);}}}}if (curVec.size() == 0){return;}else{breadthFirstTraversalImpl(curVec);}}
算法思路(以上图为例):一层一层的遍历,以A点出发同时置A已被访问,遍历所有与A点相连接的点(B点,D点)。再将B,D的索引放入curVec中,双重for循环,找与B点相连接所有的点且未被访问(C点,F点),然后找与D点相连接的所有的点且未被访问(G点,H点)。再将(C,F,G,H)放入curVec中,调用深度遍历,调用递归,依次找到与C,F,G,H相连接的所有点且且未被访问,直至最后一层访问完毕,返回。 过程如下图所示:
注:点与点之间的关系根据邻接矩阵可得
0 0
- 数据结构(C实现)------- 图的广度优先遍历
- 数据结构之图的广度优先遍历java实现
- 数据结构之图---广度优先遍历---C++实现
- 数据结构 — 图 之 广度优先遍历
- 数据结构和算法之:图的深度优先和广度优先遍历及其Java实现
- 数据结构 - 图的广度优先遍历(C++)
- 数据结构(图遍历--广度优先遍历)
- 数据结构之图的的深度与广度优先遍历
- 《数据结构和算法》之图的广度优先遍历
- 《大话数据结构》之广度优先遍历
- 图的遍历之BFS广度优先遍历C++实现
- 数据结构之图的深度优先遍历和广度优先遍历
- 数据结构学习之图的深度优先遍历和广度优先遍历
- c语言实现图的广度优先遍历
- 无向图 广度优先遍历 c语言实现
- 深度、广度优先遍历算法C实现
- C语言队列实现广度优先遍历
- 广度优先遍历 BFS C实现
- C++--堆和栈详解
- 开发感想
- 自定义AlertDialog取消窗口
- OpenCV实现图像阈值化
- Excel2013破解vba工程密码以及工作表保护密码
- 数据结构之图---广度优先遍历---C++实现
- 【C++】实现万年历
- python 计算信息熵和信息增益
- HDU5802 Windows 10[贪心+DFS]
- 最小生成树——Prim算法
- 条款十三:以by reference方式捕获异常
- 动态树-LCT-bzoj2002弹飞绵羊
- ToggleButton布局
- 解读 Joint Cascade Face Detection and Alignment 人脸检测算法