最短路径专题小结(2018.8.15)
最短路,是图论相关算法中最常见也是最基础的问题。
求单源最短路径,最常使用的算法是dijkstra算法。这次学习曲线略陡峭,特别是看着学姐给的一份用邻接表存图的代码来入门,心里苦啊。。。。
我先把邻接表如何存图这个问题啃下来,然后才真正开始研究dijkstra算法。
ok,先总结一下邻接表,邻接表我采用STL中的容器嵌套实现的。举例:
struct CNode
{
int k;//终点
int w;//权重
}
vector<vector<CNode> > S;
这里的S就是邻接表啦,例如S[1][2]是一个结构体,1代表一条边的起点,emmm,2不代表该边终点 ,S[1][2].k代表该边终点,S[1][2].w代表这条边的权重。这样存图表面看起来比邻接矩阵麻烦,其实是为之后采用优先队列优化时间复杂度作准备的。
dijkstra算法:
例题:https://vjudge.net/contest/246370#problem/G
最小生成树适用于:路线要经过所有点。
Dijkstra 适用于:不需经过所有点,只需起点到终点最短路径
第五个专题
A - Eddy's picture 最小生成树
B - Jungle Roads 最小生成树
C - Qin Shi Huang's National Road System没做出来
D - 最短路 dijkstra
E – Shopping 没做出来
F - 最短路径问题 dijkstra (数据量大,请使用scanf)
G - 一个人的旅行 dijkstra
H - find the longest of the shortest 没做出来
I – Arbitrage 没做出来
J - Saving James Bond
K - HDU Today dijkstra ,起点与终点相同时,要输出0。