vscode 配置
首先是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() 方法还可以指定新键值对要添加到容器中的位置
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