(1)首先取出节点0放入队列中
(2)开始遍历,首先将列首的元素0取出队列,然后将与0相连接的节点1,2,5,6,推入队列
(3)继续将队首的元素1取出队列,然后将与节点1相连接的节点0推入队列,由于节点0已经在队列中,所以不需要操作,继续将队首的元素2取出队列,此时与2连接的节点0已经在队列中,也不进行操作;继续将队首的元素5取出队列,然后将与5连接的节点0,3,4推入队列中,由于0已经在队列中,所以只推入3和4,
(4)继续取出队首的元素6,然后由于与6相连接的节点0和4都已经在队列中,所以不操作
(5)继续将队首的元素3取出队列,与3相连接的节点4,5都在队列中,不操作;继续将队首的元素4取出队列,与4相连接的节点3,5,6都已经在队列中,所以不操作;此时队列为空,遍历结束
可以看出广度优先遍历遍历出的节点是按距离大小顺序排列的
广度优先遍历实现程序 ShortestPath.h
//ShortestPath.h
#include <stack>
#include <iostream>
#include <cassert>
#include <queue>
using namespace std;
template <typename Graph>
class ShortestPath{
private:
Graph &G;
int s;
bool *visited;
int *from;
int *ord;
public:
ShortestPath(Graph &graph, int s):G(graph){
//算法初始化
assert( s >= 0 && s < G.V() );
visited = new bool[G.V()];
from = new int[G.V()];
ord = new int[G