图论算法学习

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$出发有负环

 

 

posted @ 2022-10-25 04:26  wd_sun  阅读(47)  评论(0)    收藏  举报