加权图的单源最短路径

本文详细介绍了两种经典的图算法——Dijkstra算法和Bellman-Ford算法。Dijkstra算法用于求解无负权边的最短路径问题,而Bellman-Ford算法则能处理含有负权边的情况。文章通过代码示例展示了这两种算法的实现,并分别应用于网络延迟时间和最便宜的航班路径计算问题。同时,还提及了基于队列优化的Bellman-Ford算法以提高效率。
摘要由CSDN通过智能技术生成

Dijkstra 算法

dijkstra算法是一种贪心算法,它只能使用在没有负权值的加权图中。它的步骤如下

  1. 创建一个记录当前最短路径的数组near和一个标记某点是否已在最短路径中的数组isGone,如果需要找出最短路径经过了哪些点,则还需要创建一个用来记录最短路径中上一个节点的数组last。
  2. 将near全部值设为一个无穷大,isGone全部设为false,将出发点的near设为0
  3. 找到当前near中最小且对应isgone为false(未加入最短路径)的点x
  4. 遍历与它直接相连且isGone为false的点,若near[x]加上直接相连边的权值小于near中记录的值,则更新该点。
  5. 将该点设为isGone
  6. 循环3~5,直至所有点都加入最短路径,或者剩下没加入点的near都为无穷大。

网络延迟时间

 

public class Solution {
    public int NetworkDelayTime(int[][] times, int n, int k) {
        int[] near=new int[n+1];
        bool[] isGone=new bool[n+1];
        for(int i=1;i<=n;i++)
        {
            near[i]=99999999;
            isGone[i]=false;
      
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值