当前位置:   article > 正文

图的深度与广度遍历及最小生成树_广度优先遍历生成树为什么是最小的?

广度优先遍历生成树为什么是最小的?

上一篇文章讲了图的有关概念以及图的两种存储方式, 点击打开链接
接下来我们一起学习图的两种遍历及最小生成树的实现。

一、图的遍历
1、广度优先遍历(Breadth First Search, BFS)

广度优先搜索类似于树的层序遍历,看一个例子:
假设我们都从节点0开始遍历,无向图遍历顺序为0,3,4,1,2,,有向图遍历顺序为0,3,4,1,2。

下面是实现的代码,需要借助队列来完成:

  1. // 图的广度优先遍历
  2. void BFS(const V& v)
  3. {
  4. queue<int> q;
  5. //标记是否已经遍历,遍历过为true
  6. vector<bool> visited(_v.size(), false);
  7. size_t index = GetIndexOfV(v);
  8. q.push(index);
  9. _BFS(q, visited);
  10. //避免漏掉与其他顶点无关的点
  11. for (size_t i = 0; i < _v.size(); i++)
  12. {
  13. if (visited[i] == false)
  14. {
  15. q.push(i);
  16. _BFS(q, visited);
  17. }
  18. }
  19. cout << endl;
  20. }
  21. void _BFS(queue<int>& q, vector<bool>& visited)
  22. {
  23. while (!q.empty())
  24. {
  25. size_t index = q.front();
  26. q.pop();
  27. if (visited[index] == true)
  28. continue;
  29. visited[index] = true;
  30. cout << _v[index] << " ";
  31. pNode pCur = _linkEdges[index];
  32. while (pCur)
  33. {
  34. if (visited[pCur->_dst] == false)
  35. q.push(pCur->_dst);
  36. pCur = pCur->_pNext;
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/627503
推荐阅读
相关标签
  

闽ICP备14008679号