![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Dijkstra
永远的EMT
每天时刻保持超越自我的意识
展开
-
Dijkstra算法
Dijkstra算法用来解决单源最短路径:设置集合S存放已被访问的顶点,然后执行n次下面的步骤:1.每次从集合V-S中选择与起点s的最短距离最小的一个顶点,访问并加入集合S;2.之后,令顶点u为中介点,优化起点s与所有从u能到达的顶点v之间的最短距离。邻接矩阵:int vis[MAXN];int G[MAXN][MAXN];int d[MAXN];void Dijk原创 2017-02-16 16:33:23 · 298 阅读 · 0 评论 -
【PAT】1018. Public Bike Management
考查点:DFS递归,Dijkstra求最短路径思路:这道题不能直接用Dijkstra来更新need和remain必须用DFS遍历所有最短路径才能更新,写Dijkstra记得判断vis[u]==false,路径用pre记录前驱节点,因为有多条最短路径,必须用Vector数组来保存,Dijkstra主要涉及的就是pre的更新,DFS每次递归到边界0处时候遍历temp路径计算need和remain,原创 2017-02-16 17:38:11 · 340 阅读 · 0 评论 -
【PAT】1030. Travel Plan
考查点:Dijkstra#include #include #include #include #include #include #include #include #include #include #include #define FOR(i, x, y) for(int i = x; i <= y; i++)#define rFOR(i, x, y) for(原创 2017-02-19 20:12:54 · 258 阅读 · 0 评论 -
【PAT】1072. Gas Station
考查点:Dijkstra算法思路:第一次输入少了&,第二次本题是1到n+m,缺少了+m,还有id转化两次写错,第一次==写错成=,第二次忽视了数字为多位数的情况,浪费时间最多的是调用ds时应该从起点s+n而不是s+m,另外,本题最求最大的最近距离,变量应设为里dmax里面才是dmin#define LOCAL#include #include #include #include原创 2017-02-19 22:08:01 · 265 阅读 · 0 评论 -
【PAT】1087. All Roads Lead to Rome
考查点:Dijkstra提交情况:输入处理没做好,结果调了半天。。。虽然没报错,是因为输入是字符串,所以最后接受的是空串,注意这里输入是n-1而不是n。。还有以后调试多输出中间结果,比较快。本题思路直接套dj算法,在维护几个数组增加判断情况即可#define LOCAL#include #include #include #include #include #include原创 2017-02-19 23:50:54 · 672 阅读 · 0 评论 -
【PAT】1111. Online Map
考查点:最短路径,Dijkstra算法,DFS思路和提交情况:本题直接DJ算法即可,第一次提交Dj没写对,主要是第一个循环找最小值时忘记判断vis,第二次没考虑相同路径,最费时间的是逻辑搞错了,题目中虽然要输出最短路中最快的但是在维护时间这个权值时不是用通过最快路径得到权值,而是在最短路径中同时更新的自己的权值,还有因为权值都是同一个数组所以调用两个dj方法顺序要按题目来。#define原创 2017-02-24 02:28:44 · 528 阅读 · 0 评论 -
【PAT】1003. Emergency
考查点:Dijkstra算法思路:直接用Dijkstra算法,但是·要增加num数组记录每个点到起点的最短路径数,判断时候在相等时也要更新,同样还要增加权值点的数组和最短路径的总权值数组来更新最大权值,增加如下代码即可:if(vis[v]==false&&d[u]+G[u][v]<d[v]){ d[v]=d[u]+G[u][v];原创 2017-02-16 10:10:20 · 350 阅读 · 1 评论