最短路径之BFS(宽度优先搜索)+优先队列(Dijkstra算法)c++/c语言

        首先,最短路径问题在树以及树的遍历:宽度优先搜索BFS c++的代码实现-优快云博客中的最后一道例题中讲过,但这只是最短路径问题中边权为1的特殊的分支之一。读者可以在阅读本篇之前思考一下,如果边权不为1的时候该怎么编码,只用普通的BFS(queue)可以实现吗?

        最短路径问题分很多种,其中最为特殊的也就是边权为1的最短路径问题,其次,还有边权为0或1的,那么这时候就需要要用到双端队列了(deque),但这并不是本篇的主题。本篇要讲的是边权为3,6,4之类的最短路径问题,也就是BFS(宽度优先搜索)+优先队列。

        其实BFS(宽度优先搜索)+优先队列我们也可以将其看作是Dijkstra算法,但两者之间还是有些许的区别,当优先队列中的优先级是距离起点的最小值时,那么BFS(宽度优先搜索)+优先队列=Dijkstra算法,我们甚至可以延申出A*算法以及IDA*算法等。

        最短路径问题也有很多解法,但最主要的解法还是BFS(宽度优先搜索)+优先队列。接下来,我们以下图为例。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值