Dijkstra 算法 github 开源项目 理解(杂乱)

 vscode 配置

项目地址 GitHub - mburst/dijkstras-algorithm: Implementations of Dijkstra's shortest path algorithm in different languages

首先是unordered_map 里面嵌套一个unordered_map的容器 存放各个图上的点

在容器里面插入图上的点 和点的 连接关系 连接关系是另一个点和点之间的距离


vector<char> shortest_path(char start, char finish)


 首先定义距离的容器,容器的内容是key值和int的距离

定义父节点的容器 容器的内容是key值和父节点char

定义heap里面的比较函数 虽然函数是left>right,但实现效果是从小到大排序

开始第一个for循环 vertices里面现在存着输入的所有图上的点 和他们的连接关系

第一个if判断vertex的第一个元素,也就算图上的点是初始点

赋值初始点的距离distance为0

除了初始点 其余的点char的距离都赋值无穷大

接着为节点集合nodes的末尾推入该点第一个元素,也就是char

然后push heap调整这些节点 不是根据节点的ascll码值调整,而是根据调整函数里面 disntance的判别调整哦 得到的结果是从小到大排序的nodes vector



开始处理node节点集合

 先对节点集合进行调整 把堆顶的元素弹出来并放到末尾

定义 smallest是节点集合的最后一个元素也就是dist最小的那个

把节点集合最末尾也就是最小的那个删掉

到这个if 如果距离最小的节点是最后的节点 则开始组成路径 只要把节点压入path vector 所以这个路径看上去是倒着来的

smallest 等于 smallest的父节点 往前推

把previous过完一遍 接着break跳出while大循环了

也就是当前最小值smallest不与前一个smallest 直接相连 因此直接跳过这个点

for循环遍历smallest的邻居节点

 

里面的一个if如果alt<distance[邻居节点]则把alt赋值给distance[最开始,都是无穷大distance,只要相连就会被替换]

make heap建立一个堆 按照comparator的方式5

unordered_map是一个将key和value关联起来的容器,它可以高效的根据单个key值查找对应的value。
key值应该是唯一的,key和value的数据类型可以不相同。
unordered_map存储元素时是没有顺序的,只是根据key的哈希值,将元素存在指定位置,所以根据key查找单个value时非常高效,平均可以在常数时间内完成。
unordered_map查询单个key的时候效率比map高,但是要查询某一范围内的key值时比map效率低。
可以使用[]操作符来访问key值对应的value值。
C++中的unordered_map用法详解_zou_albert的博客-CSDN博客_c++ unordered_map用法
insert() 方法还可以指定新键值对要添加到容器中的位置

12 STL【unordered_map介绍】【unordered_map获取/添加/删除元素 成员函数】【unordered_multimap】【unordered_set】_温酒煮青梅的博客-CSDN博客_unordered_map添加元素

c++ [&]是什么意思_软件工程小施同学的博客-CSDN博客_c++ [&]

push_heap的作用范围是[ first , last),在使用push_heap必须保证[ first , last-1)满足堆,而*(last-1)是新增在末尾的一个值,那么此时对于整个[ first , last ) , 因为*(last-1)的新增可能已经不满足堆。push_back的作用就是重新调整*(last-1)的位置,使其整个[ first , last )满足堆。
push_heap 源码剖析_LaoJiu_的博客-CSDN博客_push_heap

【STL】Heap算法——push_heap、pop_heap、sort_heap、make_heap_LLZK_的博客-CSDN博客

返回当前vector容器中末尾元素的引用

C++STL中vector容器 begin()与end()函数、front()与back()的用法_weixin_30414305的博客-CSDN博客

make_heap(), pop_heap(), push_heap()用法_sheng_max的博客-CSDN博客
c++ make_heap(), pop_heap()函数_zhusf16的博客-CSDN博客_c++ pop_heap

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值