Java实现Dijkstra算法222


Dijkstra算法是一种贪心算法,用于寻找带权图中源点到所有其他顶点的最短路径。该算法由Edsger W. Dijkstra于1956年提出,广泛应用于网络路由、物流配送和图像分割等领域。

Dijkstra算法的工作原理如下:
初始化一个距离数组,将源点到自身的最短距离设为0,其他顶点设为无穷大。
创建已访问顶点的集合,初始为空。
重复以下步骤,直到所有顶点都被访问:

从未访问的顶点中找到距离源点最短的顶点。
将该顶点标记为已访问。
更新该顶点相邻顶点的距离,如果新路径比原路径更短,则更新距离。


以下是用Java实现的Dijkstra算法代码:```java
import .*;
public class Dijkstra {
private Map graph;
private int[] distances;
private Set settled;
private PriorityQueue pq;
private int source;
public Dijkstra(Map graph, int source) {
= graph;
= new int[()];
= new HashSet();
= new PriorityQueue((Node::getDistance));
= source;
for (int i = 0; i < ; i++) {
distances[i] = Integer.MAX_VALUE;
}
distances[source] = 0;
(new Node(source, 0));
}
public void execute() {
while (!()) {
Node current = ();
(());
for (Edge edge : ((), ())) {
int distance = distances[()] + ();
if (distance < distances[()]) {
distances[()] = distance;
(new Node((), distance));
}
}
}
}
public int[] getDistances() {
return distances;
}
private class Node {
private int vertex;
private int distance;
public Node(int vertex, int distance) {
= vertex;
= distance;
}
public int getVertex() {
return vertex;
}
public int getDistance() {
return distance;
}
}
private class Edge {
private int destination;
private int weight;
public Edge(int destination, int weight) {
= destination;
= weight;
}
public int getDestination() {
return destination;
}
public int getWeight() {
return weight;
}
}
}
```

使用示例:```java
Map graph = new HashMap();
(0, (new Edge(1, 4), new Edge(2, 8)));
(1, (new Edge(2, 11)));
(2, (new Edge(3, 7), new Edge(4, 2)));
(3, (new Edge(4, 9)));
(4, ());
Dijkstra dijkstra = new Dijkstra(graph, 0);
();
int[] distances = ();
for (int i = 0; i < ; i++) {
("距离源点到顶点" + i + "的最短路径长度:" + distances[i]);
}
```

输出结果:```
距离源点到顶点0的最短路径长度:0
距离源点到顶点1的最短路径长度:4
距离源点到顶点2的最短路径长度:7
距离源点到顶点3的最短路径长度:16
距离源点到顶点4的最短路径长度:9
```

2024-11-24


上一篇:FreeMarker 中调用 Java 方法

下一篇:Java Map 入门:添加和操纵数据