zoukankan      html  css  js  c++  java
  • 算法总结篇---最短路

    写在前面

    从娃娃就开始学起最短路,我竟然不会做!!

    主要算法就三种(我只会三种): (Floyd)(Dijkstra),和已经死了的 (SPFA)

    (其实 (SPFA) 有许多优化方式都可以卡掉,会在下一章里讲,这里就不赘述)

    例题

    Sightseeing Trip

    洛谷中有这么一道题P6175 无向图的最小环问题和例题差不多

    发现 (n) 的范围很小,考虑用 (Floyd)

    因为 (Floyd) 是按照结点的顺序更新最短路的,所以我们在更新最短路之前先找到一个连接点 (k),当前的点 (k) 肯定不存在于已存在的最短路 (dis[i][j]) 的路径上,因为我们还没用这个 (k) 去更新最短路,相当于 ($i o k o j o $ j $到 (i) 的最短路 o i$)这样一个环就找到了,接下来我们要记录路径,用 (path[i][j]) 表示在最短路i到j的路径上j的前一个结点,所以我们在更新最短路时也要更新这个点,原来的最短路是 (i -> j),现在变成了 (i -> k -> j),所以有 (per[i][j] = pre[k][j]),因为要找最小环,所以不断更新找到环的权值,环更新一次,路径也要更新一次,路径更新时根据 (pre) 数组迭代一下就 (ok)

    Code

  • 相关阅读:
    51Nod1528 加号分配
    51Nod1679 连通率
    51Nod1679 连通率
    51Nod1426 沙拉酱括号
    51Nod1426 沙拉酱括号
    51Nod1678 lky与gcd
    51Nod1556 计算
    c学习第2天
    Stopwatch秒表的使用
    数据从.txt文件中导入数据库
  • 原文地址:https://www.cnblogs.com/Silymtics/p/14290430.html
Copyright © 2011-2022 走看看