博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 最短路径题目总会
阅读量:6407 次
发布时间:2019-06-23

本文共 1861 字,大约阅读时间需要 6 分钟。

求最短路基本的算法:

1>Dijkstra算法
2>Bellman-Ford算法
3>Floyd算法
4>Floyd-Warshall算法
5>Johnson算法
6>A*算法
题目:

1.(中等)

    此题是个经典题目;用Dijkstra即可;但是其中的等级处理需要一定的技巧;

   要理解好那个等级制度;这个处理好,基本就是裸体Dijkstra;

2 (基本)

   这个是简单Floyd,需要求出的是每对顶点之间的最短路径;

   然后找到那个所需时间最小的那个人中的所需时间;

3,(基本)【已经解决之,Dijkstra直接水之】

    这题是邻接矩阵的Dijkstra就可以解决的;

    直接水之;

4,(中等)

    这个时间上有点卡了。Dijkstra,bellman可能会TLE;用SPFA+邻接表可以过的;

    有个地方注意一下就好了,每个志愿者回来的时候的最短路径;将原图的每条边反向一下,对端点1再来

    SPFA就可以来;

    正向图的结果+逆向图的结果就是所求;

5,(中等偏上)

    题意是在一定的coins的限制下的最短路径;可以用Dijkstra的变形;

    用邻接边来存储边;

    松弛过程中用优先队列(边的长度短的优先)来存储边,将符合条件(coins限制)的边都加入优先队列;

    直到找到延伸到最后一个顶点即可终止循环; 因为最先到达的一定是最短路径,在coins的限制条件下;

6,(中等)

    从端点1到端点n的能够通过的最大载重;

    可以用Dijkstra变形一下,在松弛时要改变一下松弛的条件;

    另外results数组中存储的不是每个点到1的最短距离,而是能够通过的最大载重;

    这题的输出让我灰常无语,以后输出要看清啦。。

7,(基本)

    这个是bellman_ford的经典应用;

    一个套汇问题,就是通过一系列的货币交换能够到达价值增加的目的;

    就是类似判断有没有负权回路;

    类似与poj2240,poj3259;

8,(基本)http://hi.baidu.com/lewutian

    这个是poj1860的简化版本;就不多说了。。

    直接bellman水之;

9,(中等)

    和poj1797类似,所求的正好相反,也是Dijkstra的变形经典应用;

    改变一下松弛时的条件;

10,(基本)

     注意其中可能有重边;然后就是赤裸的Dijkstra;

11,(基本)

    可以用Floyd来搞定,关键是哪个边的存储,存储后就是灰常简单的Floyd了;

12,(中等)

    这个要有个重要的转化;首先price of an edge will be (sum of weights of all descendant nodes) × (unit price of the edge).

    这句指出每条边的代价为该边所有子孙节点权值之和乘以该边的权值。

    换个角度就是每个节点的代价为该节点到根节点的所有边的权值乘以该节点的权值。

   其实就是求从端点1到每个点的最短路径*改点的权值,,然后之和;

    貌似,数据有点大,用SPFA吧。。

13,(中等)

    这个题有点意思;刚开始想用bfs;

    后来发现对于每个点从该点出发的速度是恒定的,例如从a->b->c;则c出发的速度就是V*2^(A-B)*2^(B-C)=V*2^(A-C);

    所以直接求最短路径就可以了,边也知道了。用spfa。。

14,(中等)

    我靠,这个题时间卡的好紧啊!我的spfa是1400ms,时限是1500ms,汗一下;

    题意有点难理解,想明白了,其实就是求一个从1->n的最短路径;

15,(简单)

    这个题和poj1860,poj3259基本一样;

    求负权回路是否存在;用bellman直接水之;

16,(基本)

    Dijkstra可以直接过的。。只不过求的有变化;

17,(中等)

    这题可以用最短路做的;但是我看和导论那个流水线那个dp例子灰常像;

    于是就dp过了,其中有个地方需要注意,dp的话,就是可以需要检查两端的情况;

    有兴趣的可以两种都试试;

18,(中等)

    Floyd求出每个端点之间的路径中最大高度是最小的那个最大高度;

    要改变一下松弛的条件;  

19,(中等)

    这个题有点topsort的意思,其实可以用Floyd来做,而且用的很巧妙;

    邻接矩阵中用0,1,2来分别存储关系不能确定,在之前,在之后;

    然后判断每个点哪行,如果除了对角线处,没有0出现的话,那么它的位置就可以确定了。。

转载于:https://www.cnblogs.com/ngyifeng/p/3709448.html

你可能感兴趣的文章
Android 滑动效果入门篇(二)—— Gallery
查看>>
Revit二次开发示例:DesignOptions
查看>>
Entity Framework 系统约定配置
查看>>
优秀设计:纹理在网页设计中的20个应用示例
查看>>
C++ 关键字 explicit, export, mutable
查看>>
生成指定范围的一组随机数并求平均值
查看>>
android语音识别方法
查看>>
File Operations in Android NDK(转)
查看>>
如何将kux格式的视频转换成我们常用的MP4格式
查看>>
[sublime系列文章] sublime text 3插件配置说明
查看>>
学习 PixiJS — 碰撞检测
查看>>
Vue 基础篇
查看>>
JavaScript:函数防抖与函数节流
查看>>
关于区间贪心的补全
查看>>
架构设计步骤
查看>>
自定义元素探秘及构建可复用组件最佳实践
查看>>
区块链是一个公共数据库,要放在一个块内
查看>>
Jenkins 用户文档(目录)
查看>>
系统常见指标
查看>>
使用crond构建linux定时任务及日志查看
查看>>