zoukankan      html  css  js  c++  java
  • 最短路径个人理解

    陶叔滔滔不绝讲了4种最短路径求法外加一差分方程,没想过他是“好人”,没想到连坏人也不是。我只好自己苦苦煎熬着。

    Dijkstra算法是我喜欢的,不过按一般代码打法,需要大的开销,对于难一点的acm题目,可能会爆掉。它也有优化,对于我们这种小菜鸟来说,有些东西是要记住,不用太死抠的,比如优先队列,它如何如任何机智就不管了,只管用就行了。申明一个typedef pair<int,int> pii,2个值,前者存放从初始点到某点的长度,后者就是此点的端点。再用一下 priority_queue <pii,vector<pii>,greater<pii> > q;这样我们只需要取出它的头,因为它总是将第一个int值即到初始点最小的长度放在最前面,每次取出头,依靠这个点,可以松弛可以通过这个点到达的点的距离。别的就不用管了,由于最短路径的子路径也一定是最短路径,我们已经保证子路径了,所以这个原理一定是正确的。

    再看看谭奎好学长教导鄙人的:SPFA乃神器也。喜欢是放肆,但爱是克制。我迟迟学不会这个算法的原因是我爱的太深沉了!其实看代码,长得和Dijkstra差不多,不过细看你就知道,这里头不是用优先队列,所以它原理也不同,它进行松弛,松弛再松弛,松到最后总会有彩虹的(至于彩虹怎么出来的,我不是很明了。就当做自然现象吧)。用一个队列,当松弛成功的时候,判断一下当前松弛点是否已经在队列里面了,在的话只需更新一下,不在的话就得加入。(这里设了一个标志,在队列里头的话,标记为1,这也是bellman-ford的优化)

    还有一种就是floyd啥算法,一行代码可以搞定。不过效率低,n的立方。它对断点循环的松弛。

    这是我的理解,求中南好学长指导。

  • 相关阅读:
    宋宝华: 文件读写(BIO)波澜壮阔的一生【转】
    内核工具 – Sparse 简介【转】
    【java】JSON.toJSONString 空对象也可以转化为JSON字符串
    Seata分布式事务简单使用
    Mixin 工作原理
    公链
    公链
    公链
    公链
    公链
  • 原文地址:https://www.cnblogs.com/hhhhhhhhhhhhhhhhhhhhhhhhhhh/p/3878198.html
Copyright © 2011-2022 走看看