无权最短路径BFS(广度优先搜索)算法(图论)

本文介绍了如何利用广度优先搜索(BFS)算法寻找无权图中的最短路径。首先解释了BFS的基本原理,即从起点开始,先遍历距离起点为k的顶点,再遍历k+1的顶点。接着,提供了BFS的具体实现,包括初始化节点距离、队列操作以及更新路径。最后,展示了如何通过递归打印出从起点到目标点的最短路径。
摘要由CSDN通过智能技术生成

 

广度优先搜索(BFS)算法类似于树中的层次搜索:

从任意点s出发,先遍历与s相邻的点,然后再遍历于相邻的点相邻的点。注意有向图必须是顺方向的邻接点。


为什么说广度优先搜索可以用来求无权最短路径呢?因为,广度优先搜索每次都会先发现距离s为k的所有顶点,然后才会 发现距离s为k+1的所有顶点。 s为起始点。

void BFS(Graph& g, Vertex& s)
 {
  queue<vertex> q;
  for each vertex v in g
  {
   v.distance = INFINITY;
  }
  s.distance = 0;
  
  q.enqueue(s);
  while (!q.Empty())
  {
   v = dequeue(q);
   for each w adjenct to v
   if (v.distance == INFINITY)
   {
    w.distance = v. distance + 1;       
    w.path = v;
    q.enqueue(w);
   }    
  }    
 }
 对于外面的while循环,会执行|V|次,因为每个顶点入队出队一次,而里面的for循环会看到一共会执行|E|次,即变长, 所以该算法时间复杂度为O(|V|+|E|)。
 打印最短路径:
 void PrintPath(Graph& g, V

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值