图论算法学习
Dijkstra 用pair实现
- $edge$ (struct)建立edge数组$E$来记录每个点的出边
- $pair<int, int>$(struct)用来给优先队列服务,$first$为$dis[u]$, $second$为$u$
初始化:
- $dis[u] = inf$, $dis[1] = 0$
- {dis[1], 1} 压进优先队列里
每次拿出顶端,给顶端的出边做松弛
注意事项:
- $vis$的意义在于顶点$u$可能被压入多次,而根据dijjkstra的定义$u$的第一次为最短
为什么不能处理负边权:

负边权可能不能带入到其他已经被访问过的点
Bellman Ford 可以求出有负权的最短路,还可以侦测负环
- 循环每轮,松弛每一条边
- 最短路需要循环$(n-1)$轮,如果第$n$轮还可以松弛则从源点$s$出发有负环

浙公网安备 33010602011771号