迪杰斯特拉(Dijsktra)算法求到任意节点的最短路径

迪杰斯特拉算法要求

  • 1.必须给一个起点,求出起点到任何节点的最短路径,如果不可达那么距离设定为正无穷                 
  • 2.输出一张表记录一个节点到任何节点的最短路径                                                                           
  • 3.dijkstra本质是一种贪心算法

        要求: 不能出现权值为负的边(如果沿途路径不能构成一个环那么也可以,但最好不要有)

操作: 维护一张记录起点到任何节点的距离映射表,初始化起始点到自身距离为0,遍历该节点到其所有边可到达的最短距离并存入距离映射表,如果已存在比对存有的距离与当前距离取最小并更新距离映射表,一度完成后将该节点锁定到lockedSet中.开启下一轮,找出不存在与锁定set且距离最小的节点作为跳跃点 ...

/**
     * 给定一个起点返回该起点到任何节点的最短路径
     * @param start 起点
     * @return 最短路径表
     */
    public static HashMap<Node,Integer> dijkstra(Node start){
        //距离表
        HashMap<Node,Integer> distanceMap = new HashMap<>();
        //只要达到距离最小即为更新完毕,进入锁定的集合中,避免重复更新
        HashSet<Node> lockedNode = new HashSet<>();
        //起始节点距离自身距离为0,未进入的节点说明此时距离为 + ∞
        distanceMap.put(start,0);
        //对未完成更新的节点进行距离更新
        Node minNode
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值