图论–最短路算法
–yangkai
在解决最短路问题时,优秀的最短路算法是必不可少的工具
在这里介绍几种实用的算法
1 Floyd
2 Dijkstra算法
3 Dijkstra+堆优化
4 Bellman-Ford
5 SPFA(Shortest Path Faster Algorithm)
0 图的储存方式
边目录(记下来,仅此而已)
邻接矩阵(适合稠密图)
邻接表(适合稀疏图)
链式前向星(万能):
从每一个点把与之相连的边拉成一条链
用head记录下第一条边,再通过next值向后跳
手动模拟一遍代码就能理解了 ↓ ↓
struct Edge{
int v,w,next;}E[N];
int head[N],tot=0;
void add(int u,int v,int w){
E[++tot]=(Edge){v,w,head[u]};
head[u]=tot;
}
1 Floyd
处理多源最短路和最小环使用
在n<=500的情况下Floyd是不二之选
时间效率: O(n3) O ( n 3 )
//用d[i][j]表示i到j的最短路
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
d[i][j