请你使用java写一个Dijkstra 算法
这是一个Dijkstra算法的Java实现:
```java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.PriorityQueue;
public class DijkstraAlgorithm {
private int numVertices;
private int[] distances;
private boolean[] visited;
private ArrayList<Edge>[] edges;
public DijkstraAlgorithm(int numVertices) {
this.numVertices = numVertices;
distances = new int[numVertices];
visited = new boolean[numVertices];
Arrays.fill(distances, Integer.MAX_VALUE);
edges = new ArrayList[numVertices];
for (int i = 0; i < numVertices; i++) {
edges[i] = new ArrayList<Edge>();
}
}
public void addEdge(int u, int v, int weight) {
edges[u].add(new Edge(v, weight));
}
public void computeShortestPath(int source) {
distances[source] = 0;
PriorityQueue<Integer> queue = new PriorityQueue<Integer>();
queue.add(source);
while (!queue.isEmpty()) {
int u = queue.poll();
visited[u] = true;
for (Edge edge : edges[u]) {
int v = edge.destination;
if (!visited[v]) {
int distance = distances[u] + edge.weight;
if (distance < distances[v]) {
distances[v] = distance;
queue.add(v);
}
}
}
}
}
public int[] getDistances() {
return distances;
}
private class Edge {
public int destination;
public int weight;
public Edge(int destination, int weight) {
this.destination = destination;
this.weight = weight;
}
}
}
```
使用方法:
```java
public static void main(String[] args) {
DijkstraAlgorithm dijkstra = new DijkstraAlgorithm(5);
dijkstra.addEdge(0, 1, 10);
dijkstra.addEdge(0, 3, 5);
dijkstra.addEdge(1, 2, 3);
dijkstra.addEdge(1, 3, 2);
dijkstra.addEdge(2, 4, 6);
dijkstra.addEdge(3, 1, 1);
dijkstra.addEdge(3, 2, 9);
dijkstra.addEdge(3, 4, 2);
dijkstra.computeShortestPath(0);
int[] distances = dijkstra.getDistances();
for (int i = 0; i < distances.length; i++) {
System.out.println("Distance from 0 to " + i + " is " + distances[i]);
}
}
```
输出:
```
Distance from 0 to 0 is 0
Distance from 0 to 1 is 8
Distance from 0 to 2 is 11
Distance from 0 to 3 is 5
Distance from 0 to 4 is 7
```
这个示例程序构建了一个五个顶点的图,计算源顶点0到其它所有顶点的最短距离,并输出结果。

浙公网安备 33010602011771号