输出Dijkstra算法代码
时间: 2023-06-25 17:08:12 浏览: 83
下面是Dijkstra算法的伪代码:
1. 初始化图中所有节点的距离值为无穷大,起点的距离值为0;
2. 创建一个空的优先队列Q;
3. 把起点加入Q中,并设置起点的距离值为0;
4. 当Q非空时,重复执行以下操作:
a) 从Q中取出一个节点u,它的距离值为当前最小的;
b) 对于u的每个邻接节点v,如果从起点到u的距离加上u到v的距离小于v的当前距离值,更新v的距离值,并把v加入Q中。
下面是Dijkstra算法的Java代码实现:
```java
import java.util.*;
public class Dijkstra {
public static void main(String[] args) {
int[][] graph = {
{0, 2, 4, 0, 0},
{2, 0, 7, 3, 0},
{4, 7, 0, 1, 5},
{0, 3, 1, 0, 4},
{0, 0, 5, 4, 0}
};
dijkstra(graph, 0);
}
public static void dijkstra(int[][] graph, int start) {
int n = graph.length;
int[] dist = new int[n];
boolean[] visited = new boolean[n];
PriorityQueue<Integer> queue = new PriorityQueue<>(n, Comparator.comparingInt(i -> dist[i]));
Arrays.fill(dist, Integer.MAX_VALUE);
dist[start] = 0;
queue.offer(start);
while (!queue.isEmpty()) {
int u = queue.poll();
visited[u] = true;
for (int v = 0; v < n; v++) {
if (graph[u][v] != 0 && !visited[v]) {
int alt = dist[u] + graph[u][v];
if (alt < dist[v]) {
dist[v] = alt;
queue.offer(v);
}
}
}
}
for (int i = 0; i < n; i++) {
System.out.printf("Distance from %d to %d: %d\n", start, i, dist[i]);
}
}
}
```
上述代码中,我们使用了Java内置的优先队列(PriorityQueue)来实现Dijkstra算法。在每次从队列中取出节点时,我们把它的邻接节点加入队列,并更新它们的距离值。由于Java的优先队列默认是小根堆,因此我们需要使用一个比较器(Comparator)来指定按照距离值从小到大的顺序进行排序。
阅读全文