day 58 | 拓扑排序和 dijkstra

拓扑排序

  • bfs
  • 初始化,找到所有入度为 0 的节点加入 que
  • 遍历 que, 每取出一个节点,就把他对应 start 边的 end 节点的入度度数-1
  • 如果有对应度数为 0 的相邻点则加入 que

dijkstra 排序

  • 维持一个点集合
  • 往集合加入 1 节点,并且更新 mindist 数组(表示的是该节点到 1 的最短距离)
  • 遍历所有节点,得到离当前结合最近的点 cur
  • 更新和 cur 相邻的,且不在集合内的 mindist 距离
  • mindist[i]=min(mindist[cur] + g[cur][i],mindist[i])

然后是关于是否可以有负数的问题

  • Prime 维护的是一个 到集合的最短距离,所以可以有负数
  • dijkstra维护的事节点到 start 的最短距离,(不能保证一直加最小数就是最短路径,可能中途遍历过程中就能找到最短路径了)
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务