
最短路径
永远的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 · 317 阅读 · 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 · 377 阅读 · 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 · 706 阅读 · 0 评论 -
SPFA
int inq[MAXN]; int G[MAXN][MAXN]; int d[MAXN]; int num[MAXN]; int n; bool SPFA(int s) { fill(d,d+MAXN,oo); d[s]=0; queue q; q.push(s); inq[s]=1; num[s]++; while(!q.empty())原创 2017-03-01 14:14:15 · 1010 阅读 · 0 评论 -
【PAT】1111. Online Map
考查点:最短路径,Dijkstra算法,DFS 思路和提交情况:本题直接DJ算法即可,第一次提交Dj没写对,主要是第一个循环找最小值时忘记判断vis,第二次没考虑相同路径,最费时间的是逻辑搞错了,题目中虽然要输出最短路中最快的但是在维护时间这个权值时不是用通过最快路径得到权值,而是在最短路径中同时更新的自己的权值,还有因为权值都是同一个数组所以调用两个dj方法顺序要按题目来。 #define原创 2017-02-24 02:28:44 · 556 阅读 · 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 · 378 阅读 · 1 评论 -
【Leetcode】743. Network Delay Time
There are N network nodes, labelled 1 to N. Given times, a list of travel times as directed edges times[i] = (u, v, w), where u is the source node, v is the target node, and w is the time it takes fo...原创 2018-09-04 15:02:25 · 130 阅读 · 0 评论