Java PriorityQueue实现Dijkastra 思路,解释,及代码

本文介绍了Dijkstra算法在寻找有向或无向图中单源最短路径的应用。通过Edge和Graph类来实现图的表示,利用PriorityQueue数据结构按最短距离优先遍历。在dijkstra()函数中,结合Pair存储最短距离和节点,根据距离排序进行节点的选择。最终,通过代码示例展示了算法的具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dijkastra用途

Dijkstra是用于求一个有权的有向或无向图中单源最短路径(一个节点到另一个节点)的算法。简单来说就是给你一个有权图,让你去求其中一个点到另一个点的一条路径的权值之和,并且这条路径的权值之和必须是所有可能的路径中最短的。

如下图所示,Disjkstra就可以求点0到点1 2 3 4 5 6的最短路径。

 值得注意的是,如果是有负权存在,Dijkastra是用不了的。

Diskastra实现

首先我们需要考虑如何将这个图用代码实现,我这里会使用Edge和Graph类将整个图实现。当然也有其他实现图的方式,比如矩阵或者List, 但这里不过多赘述。

下面代码的实现思路是将图的每一条边Edge表示出来,并且将Edge加入到Graph类中。

Edge类实现:

public class Edge {
    int start; // Edge的起始节点
    int end; // Edge的终止节点
    int weight; // Edge的权重

    public Edge(int start, int end, int weight) {
        this.start = start;
        this.end = end;
        this.weight = weight;
    }
}

Graph类实现:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值