- DFS
- BFS
- Dijkstra
- Spfa
- Floyd
① DFS:
- 无权图的最短路(1131 Subway Map)
- 遍历
- 合并剪枝使用
② BFS
- 无权图的最短路(Saving James Bond - Hard Version)
- 层序遍历
③ Dijkstra
- 有权图的最短路
- 不能处理负边
- 可以搭配dfs处理复杂的条件(1018Public Bike Management)
④ Spfa 万能
- 有权图最短路
- 可以处理负边
- 可以判别负环
1 void spfa(s); //求单源点s到其它各顶点的最短距离 2 for i=1 to n do { dis[i]=∞; vis[i]=false; } //初始化每点到s的距离,不在队列 3 dis[s]=0; //将dis[源点]设为0 4 vis[s]=true; //源点s入队列 5 head=0; tail=1; q[tail]=s; //源点s入队, 头尾指针赋初值 6 while head<tail do { 7 head+1; //队首出队 8 v=q[head]; //队首结点v 9 vis[v]=false; //释放对v的标记,可以重新入队 10 for 每条边(v,i) //对于与队首v相连的每一条边 11 if (dis[i]>dis[v]+a[v][i]) //如果不满足三角形性质 12 dis[i] = dis[v] + a[v][i] //松弛dis[i] 13 if (vis[i]=false) {tail+1; q[tail]=i; vis[i]=true;} //不在队列,则加入队列 14 } 15 16 //https://blog.csdn.net/xunalove/article/details/70045815
⑤ Floyd
- 多源最短路