Dijkstra 算法是一种用于在加权有向图中找到从起始节点到目标节点的最短路径的算
法。它使用了贪婪的策略,逐步确定起始节点到其他节点的最短路径,并最终得到起始节
点到目标节点的最短路径。
以下是 Dijkstra 算法的步骤:
1. 创建一个距离数组 distances 和一个已访问数组 visited。distances 数组用于存储
从起始节点到每个节点的当前最短距离,visited 数组用于标记已经找到最短路径的
节点。
2. 将起始节点的距离设置为 0,将所有其他节点的距离设置为无穷大(或一个很大的
数)。
3. 重复以下步骤直到所有节点都被访问:
a. 从尚未访问的节点中选择距离最小的节点,将其标记为已访问。
b. 对于该节点的每个邻居节点,计算通过当前节点到达邻居节点的距离之和,并
与邻居节点当前的最短距离进行比较。如果计算得到的距离小于当前最短距离,则
更新邻居节点的最短距离。
4. 完成后,distances 数组中存储的就是从起始节点到每个节点的最短距离。
下面是一个使用 Java 实现 Dijkstra 算法的示例代码:
import java.util.*;
public class DijkstraAlgorithm {
public static void dijkstra(int[][] graph, int start) {
int n = graph.length;
int[] distances = new int[n];
boolean[] visited = new boolean[n];
// 初始化距离数组
Arrays.fill(distances, Integer.MAX_VALUE);
distances[start] = 0;
for (int i = 0; i < n - 1; i++) {
int minDistance = Integer.MAX_VALUE;
int minIndex = -1;
// 找到当前距离最小的节点
for (int j = 0; j < n; j++) {
if (!visited[j] && distances[j] < minDistance) {
minDistance = distances[j];
minIndex = j;
}
}